2014-03-02 54 views
1

我試圖在100個記錄的滑動窗口中使用ng-grid。該數據是實時經由signalR未來和每個消息觸發以下方法:AngularJS - ng-grid滑動窗口 - 表未從數組更改更新

onNewTrades(records) { 
     console.log("onNewRecord", records); 

     if (connectionStopped) return; 

     for (var i = 0; i < records.length; i++) { 

      if ($scope.recordsData.length > maxRecordsInTable) 
       $scope.recordsData.pop(); 

      $scope.recordsData.unshift({ 
       t: new Date(records[i][0]), 
       p: records[i][1],   
       a: records[i][2]    
      }); 
     }  
    } 

我具有100 maxRecordsInTable的閾值之前,我開始彈出項關閉端(前添加新的消息到前)

但是,當它達到我的閾值時,表格簡單地停止更新。奇怪的是,如果我在unshift()上設置了一個斷點,那麼表格會隨着每個「繼續」而更新。

我懷疑這是某種角度計時問題?我嘗試使用$超時() 或者可能當我彈出()和unshift()在同一時間它不拾起數組中的更改?我嘗試使用$ apply()(錯誤已經在摘要循環中)

回答

0

這裏可能會發生一些事情。

首先,如果onNewTrade是使用外部,無棱角,庫使得角的框架之外XHR請求(即不使用$http$resource),你必須隨時待命,代碼$scope.$apply(function(){ })想要範圍的消化來知道關於。這部分從你提供的內容不清楚。 編輯:查看更多about when to use $scope.$apply

其次,角度的摘要階段至少進行兩遍(首先進行更改,第二次以確保沒有更多的更改)。默認情況下,它最多可以傳遞10次。如果角度評估範圍10次並且不一致,則放棄。 see documentation。它這樣做是因爲您可以擁有多個手錶功能,其中一個手錶影響層次結構中較高的範圍,這會更改並影響同一手錶......基本上會導致無限循環。你看到一個關於'10 $ digest迭代的控制檯錯誤,正在中止!'或類似的東西?

有一對夫婦的其他可疑的東西:

  • onNewRecord異步?如果是這樣,我會懷疑connectionStopped正在正確完成。你可能會早點回來。因爲你說一個斷點顯示的是不移位的值,它可能不是這個問題的原因(並且很可能缺少$ scope。$ apply是問題),但我會重新考慮這個代碼。
  • 您的功能是onNewTrade(records),但您登錄onNewRecord(record)。如果您在此處有嵌套變量,請確保您未排除可能包含拼寫錯誤的代碼(例如record而不是records)。您可能正在處理意外的對象。