我在AngularJS上有一些经验,并且在网上遇到过该指令,但是它与我以前见过的东西不同,我无法理解它在做什么?有人可以帮忙吗?

具体问题:几乎不了解,指令的签名必须在进行依赖项注入。但是我正在努力的是:如果$ injector在数组中传递,为什么它也作为参数在函数中发送,即function($ injector);换句话说,为什么有两个$ injector?如果不将$ injector发送到数组中,怎么办?

另外,该指令如何嵌入控制器?您何时定义此类控制器?

我也通常在下面的代码中看到带有$前缀的范围,没有$怎么工作?

任何阅读更多或在此处说明的链接将很有用。

.directive('mycomp', [
    '$injector', function($injector) {
      var $builder, $compile, $drag;
      $builder = $injector.get('$builder');
      $drag = $injector.get('$drag');
      $compile = $injector.get('$compile');
      return {
        restrict: 'A',
        scope: {
          component: '=mycomp'
        },
        controller: 'mycompController',
        link: function(scope, element) {
          scope.copyObjectToScope(scope.component);
          $drag.draggable($(element), {
            mode: 'mirror',
            defer: false,
            object: {
              componentName: scope.component.name
            }
          });
          return scope.$watch('component.template', function(template) {
            var view;
            if (!template) {
              return;
            }
            view = $compile(template)(scope);
            return $(element).html(view);
          });
        }
      };
    }
  ])

最佳答案

为什么还要在函数中将其作为参数发送,即function($ injector);换句话说,为什么有两个$ injector?


在进行数组类型注入时,函数的参数调用方式实际上并不重要,它将映射到数组项。例如,如果我们有

['$injector', function(a) {..}]


参数a将映射到$injector实例,如果我们有

['$injector', '$scope', function(a, b) {..}]


a将映射到$injector实例,而b将映射到$scope实例。这里的顺序很重要。更多信息,请参见:缩小注释部分中的https://docs.angularjs.org/tutorial/step_05


  如果不将$ injector发送到数组中,怎么办?


如果您不这样做,则$ injector将是未定义的,其中一些已在上面说明。


  另外,该指令如何嵌入控制器?您何时定义此类控制器?


如果需要,某些指令可以具有控制器,它们应该包含一些较重的逻辑,$ scope绑定等。链接功能实际上应该只包含与$ element的交互。
更多内容:http://www.sitepoint.com/practical-guide-angularjs-directives/


  我也通常在下面的代码中看到带有$前缀的范围,没有$怎么工作?


在这种情况下,链接功能中使用了scope,它不是注射剂。在这种情况下,它是一个简单的变量scope,它引用控制器的作用域。您可以将其称为superBigVariableName,它仍将引用作用域,并且仍将起作用。
因此请记住,链接函数实际上是一个简单的函数,其中第一个属性是作用域,第二个是元素,第三个是属性,您不能将服务注入到链接函数中(在控制器中执行该逻辑)

关于javascript - AngularJS:该指令在做什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24308767/

10-11 11:53