角度指令加载顺序。

时间:2016-01-13 14:08:31

标签: javascript angularjs angular-ui-router

我有一个包含两个嵌套指令的视图。内部指令取决于要存在的外部指令。当我从头开始加载页面时,指令按预期加载,即外部存在于内部之前。但是当我从页面导航然后返回时,指令加载的顺序是相反的,即inner-directive在outer-directive之前加载。这两个指令都是服装指令。当我将外部指令更改为ng-controller时,问题就解决了。要执行导航,请使用ui-router。有没有人知道如何解决这个问题,而不必使用ng-controller作为外部指令?为什么ng-controller解决了这个问题呢?

<div outer-directive>
    <inner-directive></inner-directive>
</div>

1 个答案:

答案 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/)关于分解前/后的链接。