2016-05-20 36 views
-1

在我的控制器我有這樣的:

myApp.controller(function(){ 

    var list; 
    for (var i in data) { // This has more than 5000 objects 
    list[i] = new MyObject(data[i]); 
    } 
    // At this point, it is very fast to populate the list 
    $scope.list = list; 
    $scope.$apply() // It is here where it hangs for a long time and freezes the app 

}) 

是否有辦法避免這種情況?在我看來,我沒有對這些對象做任何改變。我只需要展示它們。

+2

根本不需要使用'$ apply()'。你問你是否可以在沒有控制器的情況下在視圖中渲染東西? –

+1

爲什麼你需要打電話申請?我列出了一些可以使用但不是那麼大的列表。你有沒有看過單向綁定? –

+0

這是怎麼回事?從你的例子看,它看起來像是在啓動,但我假設情況並非如此(你也忽略了注入$ scope,聲明數據等) – mdickin

回答

0

由於您在控制器中操作您的列表,因此不需要調用$ scope。$ apply()。

角度作出了肯定的一兩件事,它的所有指令和代碼 被包裹angulars上下文內,一個$適用()調用循環 摘要循環中,它連續運行。

所以在你的情況下,控制器基本上包裹在angulars上下文中,這會導致調用$ apply()函數的digest循環的隱式調用,從而導致更新你的視圖。

注意:如果您希望手動調用$ apply,那麼如果將您的列表包裝在$ apply()中並使用1ms延遲調用它,那麼會更好,以便不會獲得digest循環已經是運行錯誤

$scope.$apply(function( 
     $scope.list = list; 
)); 

對於您可以參考以下鏈接瞭解更多信息:

Angular JS Apply and Digest Cycle

https://www.sitepoint.com/understanding-angulars-apply-digest/

相關問題