AngularJS - ng-grid滑动窗口 - 表不从数组更改更新

时间:2014-03-02 04:37:46

标签: angularjs ng-grid

我正在尝试使用带有100条记录的滑动窗口的ng-grid。数据通过signalR实时传输,每条消息都会触发以下方法:

 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()上设置断点,那么每次“继续”时表都会更新。

我怀疑这是某种角度计时问题?我尝试使用$ timeout() 或者当我pop()和unshift()同时它没有获取数组中的更改?我尝试使用$ apply()(已经在摘要周期中出错)

1 个答案:

答案 0 :(得分:0)

这里可能会发生一些事情。

首先,如果onNewTrade正在使用一个外部的,非角度的库,使xhr请求超出angular的框架(即不使用$http$resource),那么你必须在您希望范围摘要了解的代码周围调用$scope.$apply(function(){ })。你提供的内容并不清楚。 编辑:详细了解when to use $scope.$apply

其次,角度的摘要阶段至少进行两次传递(首先进行更改,其次是确保没有更多变化)。默认情况下,它最多可以通过10次。如果角度评估范围10次且不一致,则放弃。 see documentation。这样做是因为你可以拥有多个监视功能,其中一个监视会影响层次结构中较高的范围,从而进行更改并影响同一个监视..基本上会导致一个规则的无限循环。您是否看到有关'10 $摘要迭代,中止的控制台错误!'或类似的东西?

还有其他一些值得怀疑的事情:

  • onNewRecord异步的?如果是这样,我会怀疑connectionStopped是否正确完成。你可以早点回来。因为你说断点在unshift上显示值,它可能不是这个问题的原因(并且很可能缺少$ scope。$ apply是问题),但我会重新考虑这段代码。
  • 您的功能为onNewTrade(records),但您记录的是onNewRecord(record)。如果您在此处嵌套了变量,请确保您没有排除可能包含拼写错误的代码(例如record而不是records)。您可能正在处理意外的对象。