我在尝试将$ scope和$ http注入控制器Cannot call method 'jsonp' of undefined in Angular.js controller时提出了类似的问题。现在我试图通过将代码移动到控制器内的函数来稍微重构该代码。我遇到类似的问题,似乎无法掌握Angular中依赖注入的机制。以下是我的新代码。 $ scope和$ http都是未定义的。我尝试做的是在didSelectLanguage()触发时发出一个http请求,并将结果数据分配给来自父控制器的$ scope中的“image”变量。有人可以告诉我在这个例子中依赖注入应该如何工作吗?
angular.module('myApp.controllers', []).
controller('ImagesCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.didSelectLanguage=function($scope, $http) {
console.log($scope);
$http.jsonp('http://localhost:3000/image?quantity=1&language='+this.language+'&Flag=&callback=JSON_CALLBACK')
.success(function(data){
$scope.image = data;
});
}
}])
答案 0 :(得分:20)
创建控制器时:
angular.module('myApp.controllers', []).
controller('ImagesCtrl', ['$scope', '$http', function ($scope, $http) {
// ...
}]);
由于closures,控制器功能体内的内容自动可以访问$scope
和$http
。因此,没有必要为$scope
上的函数指定任何其他内容来访问这些内容:
angular.module('myApp.controllers', []).
controller('ImagesCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.didSelectLanguage = function() {
$http.jsonp('http://localhost:3000/image?quantity=1&language=' + this.language + '&Flag=&callback=JSON_CALLBACK');
.success(function(data) {
$scope.$parent.image = data;
});
}
}]);
运行didSelectLanguage
时,它会看到$http
的引用,并将 out 函数传入外部函数以获取参考价值;成功回调中的$scope
也是如此。
因此,简而言之,没有必要将任何参数传递给didSelectLanguage
函数,在这种情况下也没有任何理由使用$injector
。
答案 1 :(得分:1)
在Michelle Tilley的评论和帮助下;文章我解决了这个问题如下。但是,我会保持问题的开放,直到其他人回答,或直到我理解得足以写一个附带的解释。
controller('ImagesCtrl', ['$scope', '$http', '$injector', function ($scope, $http, $injector) {
$scope.didSelectLanguage=function() {
$http.jsonp('http://localhost:3000/image?quantity=1&language='+this.language+'&Flag=&callback=JSON_CALLBACK')
.success(function(data){
$scope.$parent.image = data;
});
}
}])