javascript - 直接将服务注入(inject) AngularJS 指令 Controller

标签 javascript angularjs

我了解 Angular 依赖注入(inject)如何与指令一起工作,但想澄清一些事情。我有一个虚拟测试指令如下:

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>"
    }
  }
]);

这很好用,并且会按预期过滤 food 数组。但是我注意到,如果我按如下方式在指令中注入(inject) $filter 服务,它仍然有效:

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

  function($filter) {

    return {
      restrict: "E",
      scope: {},
      controller: ["$scope",function($scope) {...

我的问题:将服务注入(inject)声明行中的指令是否更好:

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

或者像这样在 Controller 行中:

Controller :["$scope", "$filter", function($scope, $filter) {?

没有区别吗?这是一个Plunker指令代码。

最佳答案

在这种情况下,您接收的是相同的服务,因此这可能无关紧要。我个人更喜欢让它们尽可能本地化;如果您不需要 link 函数中的 $filter 或类似的东西,我会把它注入(inject) Controller 。

在某些情况下,这还可以更容易地在测试期间模拟依赖项。

关于javascript - 直接将服务注入(inject) AngularJS 指令 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25111417/

相关文章:

javascript - 是否可以使用javascript捕获浏览器地址栏中的URL更改

Twig 中的 AngularJS 组件

javascript - Angularjs 设置数据

javascript - Angular :使用片段进行 anchor 滚动时出错

javascript - 设置 colorbox lightbox ajax href 变量

angularjs - AngularJS 中 $routeChangeStart 的 Jasmine 单元测试用例

json - 如何使用 $http.get 检索到的 JSON 数据和 Promise?

javascript - 如何使用 javascript 动态添加 html 元素并在 php 中保存它们的记录

javascript - 参数和实参的区别

javascript - react-router-dom v6 history push和useNavigate问题