我有一个包含两个嵌套指令的视图。内部指令取决于要存在的外部指令。当我从头开始加载页面时,指令按预期加载,即外部存在于内部之前。但是当我从页面导航然后返回时,指令加载的顺序是相反的,即inner-directive在outer-directive之前加载。这两个指令都是服装指令。当我将外部指令更改为ng-controller时,问题就解决了。要执行导航,请使用ui-router。有没有人知道如何解决这个问题,而不必使用ng-controller作为外部指令?为什么ng-controller解决了这个问题呢?
<div outer-directive>
<inner-directive></inner-directive>
</div>
答案 0 :(得分:0)
在不了解您的具体指令的情况下,您可以查看关于指令优先级的this blog post。
(控制器在与指令不同的循环中处理,因此将任何'依赖'代码内部指令要求放入控制器中解决问题是有意义的。)
这是一个有趣的部分:Angular将会出现嵌套指令的“路径”:
外部指令:编译
inner-directive:compile
outer-directive:pre-link
inner-directive:pre-link
inner-directive:post-link
外部指令:后期链接
链接的博客文章解释了“为什么”,但是这个处理顺序解释了初始页面加载(对于指令运行编译的位置)和页面返回情况(指令已经编译,我们只需要)之间的差异链路)。
同样,在不了解您的指令的情况下,您可能需要将依赖的外部指令代码重新定位到预链接(而不是链接),以便首先处理它?</ p>
您可以将Link对象分解为:
Link: {
pre: function(){
},
post: function() {
}
}
仍然需要帮助,[这里是一个不错的帖子](http://www.undefinednull.com/2014/07/07/practical-guide-to-prelink-postlink-and-controller-methods-of-angular-directives/)关于分解前/后的链接。