在控制器中向函数注入$ http和$ scope

时间:2013-07-04 20:58:30

标签: angularjs

我在尝试将$ 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;
            });

        }

  }])

2 个答案:

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

        }

  }])