我每 2 秒轮询一次数据,以使其在页面上保持更新。我的问题是当我访问另一个页面时超时保持活动状态。当我访问新页面时如何取消超时?
function IndexCtrl($scope, $timeout, RestData) {
$scope.rd = {};
(function getRestDataFromServer() {
RestData.query(function(data){
$scope.rd = data;
$timeout(getRestDataFromServer, 2000);
});
})();
}
//编辑
我找到了一种解决方案,但我不确定它是否是一个好的解决方案。当我将超时保存到 $rootScope 时,我可以在所有其他控制器中取消它。
function IndexCtrl($scope, $rootScope, $timeout, RestData) {
$scope.rd = {};
(function getRestDataFromServer() {
RestData.query(function(data){
$scope.rd = data;
$rootScope.prom = $timeout(getRestDataFromServer, 2000);
});
})();
}
function newPageCtrl($scope, $rootScope, $timeout) {
$timeout.cancel($rootScope.prom);
}
当路线更改时,会广播一些 Angular 事件。您可以在以下范围内收听他们的声音IndexCtrl
using $scope.$on
并采取相应行动:
$销毁事件
var promise = $timeout(getRestDataFromServer, 2000);
...
$scope.$on('$destroy', function(){
$timeout.cancel(promise);
});
$locationChangeStart
var promise = $timeout(getRestDataFromServer, 2000);
...
$scope.$on('$locationChangeStart', function(){
$timeout.cancel(promise);
});
$timeout()
返回一个承诺对象。该对象可以提供给$timeout.cancel()
取消超时功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)