仅当使用AngularJS从服务器中找到新数据时才自动刷新数据

时间:2015-01-27 22:27:09

标签: javascript angularjs angularjs-scope angular-promise

我对AngularJS很陌生,并且只有在从服务器检索到新数据时才会刷新页面。

我已经四处寻找,但找不到与我的问题类似的东西。

我有一个带有intervalPromise的服务和控制器,如下所示:

为MyService

angular.module('MyService', ['ngResource']).
    factory('Data', function($resource){
      return $resource('rest/getMyData', {});
});

myController的

function MyController($scope,$interval,$http, Data) {

    $scope.refresh = function() {
        $scope.jobs = Data.query();
    };

    $scope.intervalPromise = $interval(function(){
          $scope.refresh();
    }, 10000);  

    // initial load of data
    $scope.refresh();
}

每10秒钟成功从服务器检索一次数据,但我希望只有在找到新数据时才能刷新页面。

非常感谢正确方向上的一点。

2 个答案:

答案 0 :(得分:3)

您可以将从服务器收到的数据与当前数据集$scope.jobs进行比较,只有更新$scope.jobs才能进行比较。

function MyController($scope,$interval,$http, Data) {

    $scope.refresh = function() {
        var serverData = Data.query();
        if( serverData !== $scope.jobs ) {
            $scope.jobs = serverData;
        }
    };

    $scope.intervalPromise = $interval(function(){
          $scope.refresh();
    }, 10000);  

    // initial load of data
    $scope.refresh();
}

答案 1 :(得分:1)

我想我找到了一个有效的解决方案。

瑞安的回答对我也不起作用。经过一些挖掘之后,似乎它没有完全正常工作,因为Data.query()操作需要很短的时间才能返回 - 而且它在{{1}进行比较时尚未完成 - 所以刷新总是被调用(当刷新到相同的数据时,屏幕每10秒闪烁一次)。

要解决此问题,您需要使用if(...)添加延迟。

setTimeout()

无论如何这对我有用 - 所以如果有人仍然有困难可能会有用。