加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 启动新控制器时停止$timeout

发布时间:2020-12-17 08:28:26 所属栏目:安全 来源:网络整理
导读:我每2秒轮询我的数据,以保持他们在页面上更新。我的问题是当我访问另一个页面超时保持活动。当我访问新页面时,如何取消我的超时? function IndexCtrl($scope,$timeout,RestData) { $scope.rd = {}; (function getRestDataFromServer() { RestData.query(f
我每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,RestData) {
    $scope.rd = {};

    (function getRestDataFromServer() {
        RestData.query(function(data){
            $scope.rd = data;
            $rootScope.prom = $timeout(getRestDataFromServer,2000);
        });
    })();
}

function newPageCtrl($scope,$timeout) {
    $timeout.cancel($rootScope.prom); 
}
当路由被改变时,有两个角度事件被广播。你可以在IndexCtrl中使用$ scope。$ on监听它们,并相应地执行:

$ destroy事件

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()返回一个promise对象。该对象可以提供给$ timeout.cancel()函数来取消超时。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读