直接将服务注入AngularJS指令控制器

Tra*_*zeK 13 javascript angularjs

我理解Angular依赖注入如何与指令一起使用,但需要澄清某些内容.我有一个虚拟测试指令如下:

app.directive("test", [

  function() {

    return {
      restrict: "E",
      scope: {},
      controller: ["$scope", "$filter",
        function($scope, $filter) {
          var food = ["Apple pie", "Apple cobler", "Banana Split", "Cherry Pie", "Applesauce"];

          $scope.favorites = $filter('filter')(food, "Apple");
        }
      ],
      template: "<div>{{favorites}}</div>"
    }
  }
]);
Run Code Online (Sandbox Code Playgroud)

这工作正常,将按food预期过滤数组.但是我注意到如果我$filter在指令中注入服务如下,它仍然有效:

app.directive("test", ["$filter",

  function($filter) {

    return {
      restrict: "E",
      scope: {},
      controller: ["$scope",function($scope) {...
Run Code Online (Sandbox Code Playgroud)

我的问题:将服务注入声明行中的指令是更好的做法,如下所示:

app.directive("test", ["$filter", function($filter) {

或者像这样的控制器行:

controller: ["$scope", "$filter", function($scope, $filter) {

没有区别吗?这是指令代码的Plunker.

Mic*_*ley 13

在这种情况下,您将收到相同的服务,因此可能无关紧要.我个人更喜欢让它们尽可能地本地化; 如果你不需要$filterlink函数或类似的东西,我只是将它注入控制器.

在某些情况下,这也可以使测试过程中更容易模拟依赖关系.