AngularJS - Factory - TypeError:无法读取未定义的属性'getSpec'

时间:2014-10-09 15:00:37

标签: angularjs angularjs-factory

我从AngularJS开始,在尝试使用控制器中的工厂时遇到了一些问题。

我有以下工厂

angular.module('testingApp')
  .factory('factoryService', function ($http) {
    // Service logic
    var getSpec = function(p) {
      return $http.get('http://someurl//?p=' + p);
    };
    return {
      getSpec: getSpec  
    };
  });

然后我尝试从控制器中使用它,如下所示

angular.module('testingApp')
  .controller('ServiceincientsCtrl',[ function (factoryService,$scope) {
   console.log('Starting Service Incident Controller');
    factoryService.getSpec('AAA').then(function(response){
        $scope.result = response.data;
    }, function(error){
        console.log('opsssss' + error);
    });

  }]);

但是当我尝试运行它时,我会收到以下消息

TypeError: Cannot read property 'getSpec' of undefined

我不知道我错过了什么,这应该是一个新手错误,我用谷歌搜索它,我尝试了许多相同结果的例子。

我做错了什么想法?

谢谢!

2 个答案:

答案 0 :(得分:11)

看起来您没有正确使用依赖关系数组表示法。请参考以下代码。请添加“factoryService”& '$scope'作为数组项目。

.controller('ServiceincientsCtrl', ['factoryService', '$scope', function(factoryService, $scope) {
    console.log('Starting Service Incident Controller');
    factoryService.getSpec('AAA').then(function(response) {
        $scope.result = response.data;
    }, function(error) {
        console.log('opsssss' + error);
    });

}]);

dependancy injection上的Angular文档。

答案 1 :(得分:3)

首先,您没有正确地声明您的控制器。它应该是这样的:

.controller('ServiceincientsCtrl',['$scope', 'factoryService', function($scope, factoryService) {

我个人使用Service,因为我觉得它们更具可读性。

这里的工厂看起来像Service

myApp.service('factoryService', function ($http) {

    this.getSpec = function(p) {
        return $http.get('http://someurl//?p=' + p);
    }

});

这适用于您当前的控制器。