我对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秒钟成功从服务器检索一次数据,但我希望只有在找到新数据时才能刷新页面。
非常感谢正确方向上的一点。
答案 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()
无论如何这对我有用 - 所以如果有人仍然有困难可能会有用。