2014-10-28 34 views
1

我正在寫一個指令放置在ul元素上,通常與li孩子使用ng-repeat進行蓋印。我需要訪問這些孩子來做一些副本,但是在我的postlink函數中,如果我調用iElement.children(),我會得到一個空列表!更奇怪的是,如果我訪問DOM屬性,即iElement [0] .children,我會得到實際的列表。我可以通過在$ timeout中包裝所有東西來解決這個問題,但是它會在我的代碼中執行一些DOM操作時產生閃爍。我嘗試使用範圍$ evalAsync,但那時孩子們不在那裏,像以前一樣。關於發生什麼事的任何想法?我最爲好奇的是爲什麼DOM子元素屬性可行,但jqLit​​e .children()方法沒有。指令不能訪問重複的孩子,直到消化後

回答

1

這裏可能發生的事情是,指令綁定並在之前觸發ng-repeat完成渲染視圖上的元素。

你可以用你的控制器中的$ broadcast事件來解決這個問題,並用一個$ on事件監聽器來捕獲它。

if ($scope.$last === true) { 
    $scope.$broadcast('ngRepeatFinished'); 
} 

和你的指令

scope.$on('ngRepeatFinished', function(){...}); 

裏面你還可以創建一個指令爲NG-repeat事件

.directive('ngRepeatFinished', function() { 
    return { 
    restrict: 'A', 
    link: function (scope, element, attr) { 
     if (scope.$last === true) { 
       scope.$broadcast('ngRepeatFinished'); 
     } 
    } 
} 
}); 

使用$廣播或$根據您的代碼層次發出。

+0

聽起來不錯,謝謝你的迴應。我假設所有這些事件廣播和處理都將在第一次瀏覽器渲染之前發生,所以應該完美地工作。 – Derek 2014-10-28 13:37:56