如何在 ng-repeat 中轮询服务器并根据条件停止轮询

How to poll server in ng-repeat and stop polling on condition

我必须开始轮询服务器以获取多个 table 行的数据,我在 ng-repeat 中有这些。

    <table class="table table-bordered" >
  <tr>
    <th>Id</th>
    <th>Title</th>
   <th>Amount</th>
  <th>...
  </tr>
  <tr ng-repeat="data in dataList">
    <td>
      <div>{{ data.id }}</div>
    </td>
     <td>
      <div>{{ data.title }}</div>
    </td>
     <td>
      <div>{{ data.amount }}</div>
    </td>
  </tr>
</table>

这里我要分别轮询每一行,这样可以看到增加或减少的数量。当我的数量达到 100 时,我必须停止对该行的轮询。

       $scope.pollServer = function(id) {
        $scope.pollTimeout = $interval(function() {
            $scope.getAmount(id);
        }, 1000);
    }; 

任何人都可以建议在 angular 中轮询多个线程的最佳方法。以及如何停止单个线程。

TL;DR 只更新模型,ngRepeat 很神奇。

在服务中进行轮询,将其绑定到控制器中的 $scope。

app.factory('dataService', ['$http', '$q', function($http, $q){
    return {
        pollServer: function() { 
            return $http.get('url'); // do some call to API
        }   
    }
}]);

在控制器中:

$scope.dataListPromise = dataService.pollServer();

$q.all([dataListPromise]).then(function(results){
    $scope.dataList = results[0];
});

记得也将 $q 注入控制器。您可以保持 ngRepeat 与现在相同,但使用数据库中的 id 跟踪数据库结果可能是个好主意。因为你现在正在处理一个延迟,你可以使用 ngCloak 和 ngRepeat 来避免向用户显示预渲染的 $scope 变量。