Javascript AngularJS:这个指令在做什么?

Javascript AngularJS:这个指令在做什么?,javascript,angularjs,angularjs-directive,angularjs-scope,angularjs-service,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,Angularjs Service,我对AngularJS有一些经验,并且在web上遇到过这个指令,但它与我以前见过的任何东西都不一样,我无法理解它在做什么?有人能帮忙吗 具体问题:在不太了解的情况下,指令的签名必须进行依赖项注入。但我正在努力解决的问题是:如果数组中传递了$injector,为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器?如果我不将$injector发送到阵列中,什么将不起作用 另外,该指令是如何嵌入控制器的?何时定义此类控制器 此外,我通常会在下面的代码中看到带有$

我对AngularJS有一些经验,并且在web上遇到过这个指令,但它与我以前见过的任何东西都不一样,我无法理解它在做什么?有人能帮忙吗

具体问题:在不太了解的情况下,指令的签名必须进行依赖项注入。但我正在努力解决的问题是:如果数组中传递了$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);
          });
        }
      };
    }
  ])
为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器

当执行数组类型注入时,不管函数中的参数如何调用,它都会映射到数组项。例如,如果我们有

['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
参数
a
将映射到
$injector
实例,如果我们有

['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
a
将映射到
$injector
实例,
b
将映射到
$scope
实例。这里的秩序才是最重要的。更多信息:请参见缩小说明部分

如果我不将$injector发送到阵列中,什么将不起作用

如果不这样做,$injector将是未定义的,上面解释了其中的一些内容

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

如果需要的话,一些指令可以有控制器,它们应该包含一些更重的逻辑、$scope绑定等等。链接函数实际上应该只包含与$element的交互。 详情如下:

此外,我通常会在下面的代码中看到带有$前缀的作用域,没有$它是如何工作的

在这种情况下,
scope
用于link函数,它不是一个可注入函数。在这种情况下,它是一个简单的变量
scope
,它指的是控制器的作用域。您可以将其称为
superBigVariableName
,它仍然会引用范围并仍然有效。 所以请记住,链接函数实际上是一个简单的函数,其中第一个属性是范围,第二个是元素,第三个是属性,您不能将服务注入到链接函数中(在控制器中执行该逻辑)

为什么它也作为函数中的参数发送,即函数($injector);换言之,为什么有两个美元注入器

当执行数组类型注入时,不管函数中的参数如何调用,它都会映射到数组项。例如,如果我们有

['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
参数
a
将映射到
$injector
实例,如果我们有

['$injector', function(a) {..}]
['$injector', '$scope', function(a, b) {..}]
a
将映射到
$injector
实例,
b
将映射到
$scope
实例。这里的秩序才是最重要的。更多信息:请参见缩小说明部分

如果我不将$injector发送到阵列中,什么将不起作用

如果不这样做,$injector将是未定义的,上面解释了其中的一些内容

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

如果需要的话,一些指令可以有控制器,它们应该包含一些更重的逻辑、$scope绑定等等。链接函数实际上应该只包含与$element的交互。 详情如下:

此外,我通常会在下面的代码中看到带有$前缀的作用域,没有$它是如何工作的

在这种情况下,
scope
用于link函数,它不是一个可注入函数。在这种情况下,它是一个简单的变量
scope
,它指的是控制器的作用域。您可以将其称为
superBigVariableName
,它仍然会引用范围并仍然有效。
所以请记住,链接函数实际上是一个简单的函数,其中第一个属性是范围,第二个是元素,第三个是属性,您不能将服务注入到链接函数中(在控制器中执行该逻辑)

一个非常好的解释谢谢,您能为在指令中嵌入控制器的更复杂内容提供一个好的链接吗(为了支持你上一段的解释,不是因为它没有答案,而是为了扩展我在这些方面的知识)?也许在这里:这不是很常见且记录良好的事情:[非常好的解释谢谢,你能为指令中嵌入控制器的更复杂内容提供一个好的链接吗(为了支持你上一段的解释,不是因为它没有回答,而是为了扩大我对这些问题的了解)?也许在这里:这不是很常见,也没有很好的记录:[