我从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
我不知道我错过了什么,这应该是一个新手错误,我用谷歌搜索它,我尝试了许多相同结果的例子。
我做错了什么想法?
谢谢!
答案 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);
}
});
这适用于您当前的控制器。