2014-11-05 31 views
0

這是另一個問題的分支(Angular: running function in controller when all directives are loaded),因爲這是一般性問題。如何檢測所有指令何時加載?

如何檢測頁面上的所有角度指令何時加載?

編輯:

我發現到目前爲止是建立在它的連接功能中觸發範圍功能,最高等級的指令的唯一方法。這適用於angular從外部到內部編譯頁面上的所有指令,並將鏈接函數從內部調用到外部。

缺點:如果任何內部指令使用templateUrl,則此操作不再有效,因爲這將發生異步。這將導致外部指令鏈接函數在內部指令鏈接函數之前運行。此外,您必須爲所有視圖/包含添加指令。

EDIT2:

我發現了一個偉大的答案,它描述上述問題類似的問題。而在j_walker_dev提到了以下的評論:

The way i got around this was to use template, like mentioned. 
But to inject $templateCache and do template: $templateCache.get('url.tpl.html'). 

SO問題:How to execute parent directive before child directive?

至少在這個曾經可以繼續使用templateUrls因爲它避免了模板加載的指令異步行爲。

+0

你是不是指index.html? – 2014-11-05 17:36:45

+0

在包含指令的任何html端。這也可以在ng-view或ng-include中。 – jimmy 2014-11-05 18:09:01

回答

0

這是怎麼量角器同步:

functions.waitForAngular = function(rootSelector, callback) { 
    var el = document.querySelector(rootSelector); 
    try { 
    if (angular.getTestability) { 
     angular.getTestability(el).whenStable(callback); 
    } else { 
     angular.element(el).injector().get('$browser'). 
      notifyWhenNoOutstandingRequests(callback); 
    } 
    } catch (e) { 
    callback(e); 
    } 
}; 

知道,在緩存指令將同步執行,另一種需要從服務器加載模板$瀏覽器通知之前將執行,這是我會怎麼做(如果等待Ajax請求的其他人比模板不是問題)

+0

聽起來很有趣,我得看看。這個缺點似乎是這是一個內部API,因此不應該直接使用? – jimmy 2014-11-06 23:32:23

+0

getTestability'可能'是一個內部API(這將意味着在一個內部角度項目中的量角器,事實並非如此)。 'notifyWhenNoOutstandingRequests'實際上是公開的瀏覽器服務,可以自由使用 – 2014-11-07 08:35:38

相關問題