即使我没有注入自定义服务,我也很困惑为什么以下代码可以正常工作。当你必须注射时,我不会得到,而当你不注射时,我不会。
http://plnkr.co/edit/aCpIYleNL4p9IRA0aAzr?p=preview
(function() {
'use strict';
angular.module('svccApp', []);
angular.module('svccApp').
factory('bareService', [
function() {
var myValue = {};
myValue.str1 = 'xyz';
return myValue;
}
]);
angular.module('svccApp')
.controller('MyController', MyController);
// WHY IS THIS NOT NECESSARY?
//MyController.$inject = ['$scope', 'bareService'];
function MyController($scope, bareService) {
$scope.testVal = bareService.str1;
}
}());
答案 0 :(得分:2)
Angular非常聪明,可以查看Controller参数的名称,并找出需要注入的内容。但是,如果缩小代码,则需要手动指定要作为字符串注入的内容(例如MyController.$inject = ['$scope', 'bareService'];
),因为参数名称将被修改。
例如,这个:
function MyController($scope, bareService) {
$scope.testVal = bareService.str1;
}
可能会缩小为:
function MyController(a, b) {
a.testVal = b.str1;
}
哪会打破依赖注入。
答案 1 :(得分:-1)
您正在注入该服务。用匿名函数替换你的命名函数:
angular.module('svccApp')
.controller('MyController', function($scope, bareService) {
$scope.testVal = bareService.str1;
});
实际上,它和你正在做的一样,你会发现它几乎反映了你将服务注入控制器的任何例子。