在我的控制器中我有这个:
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
})
有没有办法避免这种情况?在我看来,我没有对这些对象进行任何更改。我只需要显示它们。
答案 0 :(得分:0)
由于您在控制器中操作列表,因此您不需要调用$ scope。$ apply()。
Angular已经确定了一件事,那就是它的所有指令和代码 在angulars上下文中包含一个$ apply()循环被调用 在摘要循环中它连续运行。
所以在你的情况下,控制器基本上包含在angulars上下文中,这导致隐式调用digest循环,调用$ apply()函数,从而导致你的视图被更新。
注意:如果你想手动调用$ apply,那么如果你将你的列表包装在$ apply()中并以1ms的延迟调用它会更好,这样就不会得到一个摘要循环已经运行错误:
$scope.$apply(function(
$scope.list = list;
));
有关详细信息,请参阅以下链接:
Angular JS Apply and Digest Cycle
https://www.sitepoint.com/understanding-angulars-apply-digest/