2016-01-13 84 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/)。