在Angular Service中使用$ http - 无法读取未定义的属性“post”

时间:2015-09-13 10:27:51

标签: javascript angularjs dependency-injection

我正在努力学习如何使用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,所以我不完全确定我做错了什么。看到有什么问题吗?

1 个答案:

答案 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
    };
}