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

Javascript 有没有办法在angularjs中不使用$scope或$digest来呈现列表?,javascript,angularjs,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(

在我的控制器中,我有:

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

})

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

因为您在控制器中操作列表,所以不需要调用$scope。$apply()

Angular确保了一件事,即它的所有指令和代码 在angulars上下文中,调用$apply()循环 在摘要循环中,它连续运行

因此,在您的例子中,控制器基本上被包装在angulars上下文中,这导致隐式调用调用$apply()函数的摘要循环,从而导致视图被更新

注意:如果您希望手动调用$apply,那么最好将列表包装在$apply()中,并以1ms的延迟调用它,这样就不会出现摘要循环已在运行的错误:

$scope.$apply(function( 
       $scope.list = list;
));
有关更多信息,请参阅以下链接:


您根本不需要使用
$apply()
。您是否在询问是否可以在没有控制器的情况下渲染视图中的内容?为什么需要调用apply?我有一些很有用但不是很大的清单。你也看过单向绑定吗?是什么驱动了这个呼叫?从您的示例来看,它看起来像是在启动时,但我假设情况并非如此(您还忽略了注入$scope、声明数据等)。我的错,您是对的,我不需要调用apply()。我想问题在于ng repeat,它会冻结应用程序直到完成循环。不,启动时不会调用它。它是通过一个ng点击来调用的。只是让代码更简单。谢谢