AngularJS依赖注入植入方法

时间:2013-11-20 21:21:03

标签: angularjs dependency-injection

请参阅下文,依赖注射的2个样本在他们正在做的事情上是否基本相同,或者我错过了我生命中重要的事情?

代码示例#1

angular.module("app", []);
function Controller($scope, SomeService) {
   // do stuff
}

Controller.$inject = ['$scope', 'SomeService'];    

代码示例#2

angular.module("app", [])
.controller("Controller", [ '$scope', 'SomeService' function($scope, SomeService){
    // do stuff
}]);

1 个答案:

答案 0 :(得分:1)

这两段代码不一样。

angular.module("app", []);
function Controller($scope, SomeService) {
   // do stuff
}

Controller.$inject = ['$scope', 'SomeService'];    

虽然它确实声明app模块存在,但是不将控制器添加到模块(命名空间)app中。另外,我认为这段代码不会运行。请参阅下文,了解如何使用这种注射方式。

angular.module("app", [])
.controller("Controller", [ '$scope', 'Service' function($scope, SomeService){
    // do stuff
}]);

第二种形式使用速记.controller()方法创建控制器并注入资源。然后,您可以angular.module('app')提取对指定控制器的引用。

要手动注入控制器,请遵循以下样式:

angular.module('app', [])
  .factory('someService', function($window) {
    return {
      serve: function(text) {
        $window.alert(text);
      }
    };
  });

var injector = angular.injector(['app', 'ng']);

function Controller($scope, someService) {
  $scope.doStuff = function() {
    someService.serve('Doing stuff');
  };
}

injector.instantiate(Controller);

有关完整示例,请参阅:http://docs.angularjs.org/guide/di