我正在努力学习如何使用Angular,将所有业务逻辑都放在服务中。
当我在服务中发布帖子请求时,我收到以下错误:
Cannot read property 'post' of undefined
以下是一些代码:
UrlApp.controller('UrlFormCtrl', UrlFormCtrl);
UrlApp.factory('addUrlService', addUrlService);
function UrlFormCtrl($scope, $http) {
console.log('Url Form Controller Initialized');
$scope.addUrl = addUrlService.bind(null, $http);
}
function addUrlService($scope, $http){
console.log('initializing addUrlService');
return $http.post('urls/create', {'test':'test'}).then(function(response){
return response.data;
});
}
我只是掌握了Angular,所以我不完全确定我做错了什么。看到有什么问题吗?
答案 0 :(得分:2)
首先,您不需要在服务中注入$scope
。
其次,您不需要在控制器中注入$http
服务。
第三,您需要在控制器中注入服务。
最后,addUrlService
服务返回一个承诺,意味着它将在实例化服务时发出请求。您可能希望返回一个函数或一个包含多个函数的对象。
所以我会将你的代码更改为:
UrlApp.controller('UrlFormCtrl', UrlFormCtrl);
UrlApp.factory('AddUrlService', AddUrlService);
function UrlFormCtrl($scope, AddUrlService) {
$scope.addUrl = AddUrlService.addUrl;
}
function AddUrlService($http) {
function addUrl() {
return $http.post('urls/create', {
'test': 'test'
}).then(function (response) {
return response.data;
});
}
return {
addUrl: addUrl
};
}