有没有办法在angularjs中使用$ scope或$ digest来呈现列表?

时间:2016-05-20 17:33:50

标签: javascript angularjs

在我的控制器中我有这个:

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

})

有没有办法避免这种情况?在我看来,我没有对这些对象进行任何更改。我只需要显示它们。

1 个答案:

答案 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/