2013-03-02 65 views
2

我有以下的html:讓外部指令之前運行內部指令angularjs

<div nag-tabs="tabsOptions"> 
    <ul class="tabs"> 
      <li ng-repeat="tab in tabs">{{ tab }}</li> 
    </ul> 
    <div class="tab_content"> 
      <div ng-repeat="tabContent in tabsContent">{{ tabContent }}</div> 
    </div> 
</div> 

,我有是標籤指令在該NG重複指令之前運行的問題。

有沒有什麼辦法讓所有包含nag-tab指令運行的指令(ng-repeat或其他任何可能放在那裏)的指令之後運行tabs指令?

+0

不知道是否是最好的解決方案,但我發現使用'$ timeout(/ *運行指令代碼* /,0)'有助於允許渲染html的時間 – charlietfl 2013-03-02 20:22:43

回答

4

指令可以在三個不同時間「運行」,因爲指令可以具有編譯,預鏈接和後鏈接方法。 This plunker包含兩個示例HTML結構–一個使用ng-repeat,一個不使用–,並在3個指令函數中的每一個運行時打印出來。

對於ng-repeat示例,我們看到ng-repeat前後鏈接函數在nag-tabs後鏈接之後運行。因此,如果你想讓tabs指令在ng-repeat post-link函數運行後執行某些操作,你必須使用$ timeout(如@charlietfl建議)或$ watch或事件來執行代碼後來。

您可以嘗試在ng-repeat元素中添加checklast指令,該指令可能在$lasttrue時指示您的選項卡指令。信號可以通過一個事件來完成,或者checklast指令可以用你的選項卡指令require,然後checklast指令可以在你的選項卡指令的控制器上調用一個方法。 另請參閱https://stackoverflow.com/a/13906907/215945

注意,漂亮的闖入者來自Peter

0

你控制tab指令嗎?如果是這樣,您可以修改其編譯階段以將ng-repeat添加到其子元素。