2015-02-11 21 views
1

我正在AngularJS中構建一個應用程序。我的應用程序也使用第三方作用於像這樣的一個div JavaScript庫:

<div id="turn-me-into-a-slider"></div> 

現在我確實有幾個這樣的div,並使用NG-重複,使他們。所以,它真的看起來更像是這樣的:

<div id="sliders-container" ng-repeat="slider in sliders track by $index"> 
    <div id="slider-{{$index}}"></div> 
</div> 
在我的代碼

現在,當我想添加一個滑塊第一我添加一個新的滑塊sliders陣列。這應該傳播到DOM,然後我可以運行id="slider-n" div上滑塊的初始化函數。這是問題出現的地方。如果在將新值推入sliders數組之後立即將滑塊的初始化函數放入,DOM尚未更新,並且調用滑塊初始值設定項時,不會有DOM元素正確的編號,並且初始化失敗。如果我先打電話$scope.$apply(),那就解決了問題,但偶爾我會得到一個error, $scope.$apply() already in progress。有沒有辦法可以調用$ scope。$ apply()只有當它不在運行時才能避免這種情況?如果您有任何其他建議,我會歡迎他們。

回答

0

試試這個:

setTimeout(function() { 
    $scope.$apply(/**your function*/); 
}, 1000); 

更多在這裏解釋:Why is using if(!$scope.$$phase) $scope.$apply() an anti-pattern?

+0

我需要$ $範圍適用於()立即運行,因爲下一行依賴於DOM被更新。 – user3413723 2015-02-18 13:09:25

+0

您可以使用$$階段,就像文章但不是所有要執行的應用,其他選項是evalAsync,但會影響性能(我認爲....),或者其他方式是將1秒變爲1毫秒,嘗試對你的情況最好。 – 2015-02-18 13:36:28

相關問題