2014-03-02 31 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)。您可能正在处理意外的对象。