簡體   English   中英

AngularJS:在長時間運行的循環中強制DOM更新(即進度指示器)

[英]AngularJS: force DOM update during long-running loop (i.e. progress indicator)

我的應用程序允許用戶提供數據進行分析,我想提供一個進度指示器。 盡管我的模型正確地反映了進度,但是DOM僅在分析結束時(因此在摘要循環結束時)更新。 有沒有辦法我可以強制中消化?

我意識到我的另一種選擇是提取分析,使其獨立於摘要循環運行,然后調用$ scope。$ apply,但是這種重構是不可取的。

<div>{{progress}}</div>
<script>
  ...
  for(i=0; i<dataPoints.length; i++){
    ...long-running analysis inside the digest loop...
    $scope.progress = (i+1)/dataPoints.length * 100;
    //how do I force a DOM update here?
  }
  ...
</script>

只要您將循環從摘要中取出,只要它是主線程的一部分並保持同步就沒關系,直到完成,它才更新DOM。

您的選擇是:

  1. 設置要在超時功能中執行的每個元素分析,並從那里更新進度。 如果您不關心操作以什么順序完成(例如,

     for(i=0; i<arr.length; i++){ $timeout(function(){ //do something here and increase the progress counter }) } 
  2. 如果您關心順序,請使用類似以下的遞歸函數

     function recursive(arr, index){ if(arr.length==index-1){ //you are done } //do something $timeout(function(){ recursive(arr,index+1) }) } 
  3. 如果您不關心舊的瀏覽器,請使用webworker。 這是一個更復雜的解決方案。 您可以在w3schools上看到它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM