在根据我的需要重写ng-include
时,我发现直接ngIncludeFillContentDirective
,声明为ng-include
,如:
.directive({ngInclude: ngIncludeDirective}).directive({ngInclude: ngIncludeFillContentDirective})
您可以看到ngInclude source here。您可以看到上面here调用的指令方法。
那么,它对实际指令的影响到底是什么?它只是作为另一个指令应用吗?它有特殊意义吗?
答案 0 :(得分:3)
您可以对多个指令使用相同的名称,如果您查看ngInclude ngInclude.js的源代码,您将看到所有指令都具有优先级属性。第一个是400,最后一个是-400。优先级实际上表示执行相同名称但不同优先级的指令的顺序。
您甚至可以出于某种原因附加您的指令,但添加较低的优先级以确保它呈现所需的。虽然不建议覆盖原生ng指令。
答案 1 :(得分:1)
你second link正在展示核心角度指令的编译。编译提供程序使用.directive
$provide.provider('$compile', $CompileProvider).
函数
您的第一个链接显示ngInclude
和ngIncludeFillContentDirective
的声明。您可以在ngIncludeFillContentDirective
上看到ngInclude
取决于。
我很确定在编译期间,ngInclude
需要在编译ngIncludeFillContentDirective
之前先编译。
所以,我相信这与.directive
链接在一起,以便按照正确的顺序排序编译过程并构建依赖项。
修改强>
所以,$CompileProvider
为directive
。此对象上有一个名为forEach(name, reverseParams(registerDirective));
的函数。这是OP中调用的函数。
您可以看到,如果参数不是字符串,则在参数对象上调用此行:
forEach
这主要使用forEach
来迭代参数对象的属性。 iterator.call(context, obj[key], key);
将键从对象中拉出,然后执行此操作:
ngInclude
因此,它只使用密钥的值。
我认为这归结为对象中的属性名称(因此,{ngInclude: ngIncludeFillContentDirective}
中的ngIncludeFillContentDirective
)必须是唯一的。属性({{1}})的值是注册的。
所以,似乎没有任何特殊含义。至少没有我能找到的。