仅当使用 AngularJS 从服务器中找到新数据时,才自动刷新数据
Auto refresh data only when new data is found from the server with AngularJS
我是AngularJS的新手,并且有一个关于仅在从服务器检索新数据时才刷新页面的快速问题。
我已经搜索了周围,但找不到与我的问题类似的任何内容。
我有一个服务和控制器,其间隔承诺如下:
我的服务
angular.module('MyService', ['ngResource']).
factory('Data', function($resource){
return $resource('rest/getMyData', {});
});
我的控制器
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 秒从服务器成功检索一次数据,但我希望页面仅在找到新数据时才刷新。
如果能有正确的方向,将不胜感激。
您可以将从服务器接收的数据与当前数据集($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();
}
我想
我已经找到了一个有效的解决方案。
瑞安的回答对我也不起作用。经过一番挖掘后,它似乎不能正常工作,因为 Data.query() 操作需要很短的时间才能返回 - 而且在if(...)
进行比较时它还没有完成 - 所以刷新总是被调用(屏幕只是每十秒"闪烁"一次,因为它刷新到相同的数据)。
要修复它,您需要添加延迟 setTimeout()
.
function MyController($scope,$interval,$http, Data) {
$scope.refresh = function() {
var serverData = Data.query();
setTimeout(function(){
if (serverData !== $scope.jobs){
$scope.jobs = serverData;
}
}, 100);
};
$scope.intervalPromise = $interval(function(){
$scope.refresh();
}, 10000);
// initial load of data
$scope.refresh();
}
无论如何,这对我有用 - 所以如果有人仍然遇到困难,它可能会很有用。
相关文章:
- 如何检查Json文件更新,如果更新了,则用更新的数据刷新我的页面
- JQGrid使用服务器编辑后的更新数据刷新数据
- 如何使用新的JSON数据刷新jsTree
- jQueryAJAX将数据重新加载到DOM中,或者使用新数据刷新DOM
- 插入数据并用新数据刷新数据网格后,关闭弹出窗口
- 正在删除数据(刷新)WebGL Globe
- 使用 ajax 调用使用操作类返回的数据刷新(更新)表的各个行
- 好吗 - 使用 setInterval 进行数据刷新
- 数据表无限 + 自动数据刷新
- 模式未使用新数据刷新
- 聚合物-使用绑定数据刷新模板
- Angular如何知道应该重新应用绑定来用更新的数据刷新UI元素
- 连续添加|更新|将数据库中的数据刷新到页面而不回发
- 使用服务器端数据刷新gridx
- 在数据刷新后保留最后的Flot十字准线和图例数据
- 如何用新数据刷新剑道网格
- Ng-Grid将在数据刷新后折叠行,如何防止这种情况
- 当数据刷新时,jQuery UI手风琴不工作
- 如何在ajax网格中使用数据刷新作为触发器
- 如何在AngularJs中保持页面上的数据刷新