gpt4 book ai didi

AngularJS $interval 函数在路由更改后继续

转载 作者:行者123 更新时间:2023-12-02 18:59:24 29 4
gpt4 key购买 nike

我在 Controller 中有一个基于 setInterval 的函数。我注意到,在第一次调用它之后,它工作得很好,但即使在路线改变后它仍然继续。之后我尝试使用 native $interval 服务,它会自动跟踪范围的变化。然而问题依然存在。所以现在我有两个问题。第一个是我可以做什么,以便我在特定 Controller 内使用重复功能,该功能在用户离开该路线时停止?另外,既然我改变了范围,为什么范围函数还会继续?

更新 - 代码是这样的

$scope.refreshScore() {
....
}
$scope.refreshMe = function(){
$interval($scope.refreshScore, 10000);
}

最佳答案

也许尝试在范围的销毁事件上取消它。

$scope.refreshScore() {
....
}
var intervalPromise;
$scope.refreshMe = function(){
intervalPromise = $interval($scope.refreshScore, 10000);
}
$scope.$on('$destroy',function(){
if(intervalPromise)
$interval.cancel(promiseFromInterval);
});

$interval 可能不是最好的解决方案,特别是如果它是一些异步操作。如果你绝对必须有一些定时操作,你希望每 x 毫秒发生一次,我会使用这样的东西:

var refreshingPromise; 
var isRefreshing = false;
$scope.startRefreshing = function(){
if(isRefreshing) return;
isRefreshing = true;
(function refreshEvery(){
//Do refresh
//If async in then in callback do...
refreshingPromise = $timeout(refreshEvery,10000)
}());
}

然后执行与上面相同的操作

如果您在取消刷新时遇到问题,您可以尝试订阅某种路由更改事件。并在那里做。

关于AngularJS $interval 函数在路由更改后继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568494/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com