不理解为什么这个AngularJS无需$ inject服务即可工作

时间:2014-11-14 20:04:12

标签: angularjs

即使我没有注入自定义服务,我也很困惑为什么以下代码可以正常工作。当你必须注射时,我不会得到,而当你不注射时,我不会。

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;
}

  }());

2 个答案:

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

实际上,它和你正在做的一样,你会发现它几乎反映了你将服务注入控制器的任何例子。