AngularJS - 内部指令 - 当我用templateUrl属性替换template属性时,postLink函数调用的顺序会发生变化

Ben*_*ado 9 angularjs angularjs-directive

我有一个奇怪的情况.如果我有一个包含2个指令的外部指令

inner-directive1 - 定义了一个模板.

inner-directive2 - 定义了templateUrl.

内部指令1 postLink函数在外部指令postLink函数之前被调用 - 正如预期的那样.

但是,inner-directive2 poslink函数是在外部指令postLink之后调用的 - 不是预期的.

对postLink函数的调用是:inner-directive1,outer-directive,inner-directive2,我期待:inner-directive1,inner-directive2,outer-directive.

外部指令的模板是:

<div ng-transclude><div inner1></div><div inner2></div></div>
Run Code Online (Sandbox Code Playgroud)

请看看JsFiddle

有谁知道原因?有没有一种方法可以让它按预期工作?

JSFiddle - 请查看控制台日志.谢谢,本

Kay*_*ave 10

这就是为什么,从Angular指令docs(http://docs.angularjs.org/guide/directive):

templateUrl - 与模板相同,但模板是从指定的URL加载的.由于模板加载是异步的,因此编译/链接将暂停,直到加载模板为止.

因此,在加载模板之前,特定指令会停止链接.在此期间,您的其他指令会跳入并运行.

如果链接功能的时间关键,则需要直接包含模板而不是templateUrl.除非有人能想出一个很酷的方法.

  • @Ben Landiado如果你有相互依赖的指令,你就不能指望执行的顺序.您需要将设计更改为在框架的约束内工作.如果您更新帖子中有关于您真正尝试完成的更多详细信息,我们可以帮助您重新设计指令. (2认同)