我正在使用angularjs开发一个项目。我正在使用ngResource进行web服务调用。在我的应用程序中,有一个web服务调用,每30秒运行一次。现在我面临的问题是,在某些情况下,用户操作调用的web服务和自动运行的web服务相互冲突。我想避开它。我该怎么做?
setInterval(function () {
$scope.getAllReports();
}
}, 30000);
reportService.factory('Reports', function ($resource, AppSettings) {
return $resource(AppSettings.api_url + 'reports/:reportId', {
reportId: '@reportId'
}, {
getReports: {
method: 'POST'
}
});
});
请查看演示
http://jsfiddle.net/Kn3Tc/79/
首先,您应该考虑使用$interval(window.setInterval的Angular包装器)
它确保范围的任何更改都将反映在其他地方。
在你的控制器中,你也可以在每次用户手动点击按钮时重置你的间隔,以避免碰撞(如果我正确理解你想要的):
var interval;
function startInterval() {
interval = $interval(function () {
$scope.results = myService.get();
}, 30000);
}
$scope.advanceSearch = function() {
$scope.results = myService.get();
$interval.cancel(interval);
startInterval();
};
startInterval();
另外,不要忘记添加$interval作为依赖项。
链接:http://plnkr.co/edit/AuLJjiSLsscimvZC5Spi