2016-01-13 172 views
0

我有一个包含两个嵌套指令的视图。内部指令取决于外部指令是否存在。当我从头开始加载页面时,指令按预期方式加载,即外层在内层之前存在。但是,当我从页面导航然后返回时,指令加载的顺序被颠倒过来,即内部指令在外部指令之前加载。这两个指令都是服装指令。当我改变外部指令而不是ng控制器时,问题就解决了。使用导航UI路由器。有没有人知道如何解决这个问题,而不必使用NG控制器作为外部指令?为什么ng-controller解决了这个问题?Angular指令加载顺序。

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

没有足够的信息继续下去,不知道控制器实际做了什么,或者每个指令中的内容。你能够创建一个片段或jsfiddle来演示这个吗? – Neil

+0

内部指令是否列出了依赖关系?即需要:'^ outerDirective'? –

回答

0

不知道你的具体指令有多少,你可以看看关于指令优先级的this blog post。 (控制器在与指令不同的循环中得到处理,因此将任何'依赖'代码内部指令要求放入控制器可以解决您的问题是有意义的)。

这里有一个有趣的现象:角会随之而来,它的出现,为您的嵌套指令这个“路径”:

外指令:编译

内部指令:编译

外-directive:pre-link

inner-directive:pre-link

inne R-指令:后期制作环节

外指令:链接后

链接的博客文章解释“为什么”,但这种处理顺序介绍初始页面加载之间的差异(如编译运行的指令)和你的页面返回的情况(其中指令已经编译,我们只需要链接)。

再说一遍,在不太了解指令的情况下,也许你需要将依赖的外部指令代码重定位到预先链接(而不是链接),以便它首先得到处理?

你做到这一点的分手你的链接对象为:

Link: { 
    pre: function(){ 
    }, 
    post: function() { 
    } 
} 

仍需要帮助,[这里有一个像样的文章]分手链接到前/后上(http://www.undefinednull.com/2014/07/07/practical-guide-to-prelink-postlink-and-controller-methods-of-angular-directives/)。