我目前正在轮询服务器以检查新数据,然后相应地更新 AngularJS 应用程序中的模型。他大致就是我正在做的事情:
setInterval(function () {
$http.get('data.json').then(function (result) {
if (result.data.length > 0) {
// if data, update model here
} else {
// nothing has changed, but AngularJS will still start the digest cycle
}
});
}, 5000);
这工作正常,但大多数请求不会导致任何新数据或数据更改,但 $http 服务并不真正知道/关心,仍然会触发摘要循环。我觉得这是不必要的(因为摘要循环是应用程序中最繁重的操作之一)。有没有办法仍然可以使用 $http 但如果没有任何变化,以某种方式跳过摘要?
一种解决方案是不使用 $http 而是使用 jQuery,然后调用 $apply 让 Angular 知道模型已更改:
setInterval(function () {
$.get('data.json', function (dataList) {
if (dataList.length > 0) {
// if data, update model
$scope.value = dataList[0].value + ' ' + new Date();
// notify angular manually that the model has changed.
$rootScope.$apply();
}
});
}, 5000);
虽然这似乎可行,但我不确定这是一个好主意。如果可能的话,我仍然想使用纯 Angular。
有人对上述方法的改进或更优雅的解决方案有任何建议吗?
PS 我使用 setInterval 而不是 $timeout 的原因是因为 $timeout 还会触发一个摘要循环,在这种情况下这将是不必要的,只会增加“问题”。