请参阅下文,依赖注射的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
}]);
答案 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