Angular、UI 路由器。在状态控制器中使用 $interval 如下所示:
$scope.Timer = null;
$scope.startTimer = function () {
$scope.Timer = $interval($scope.Foo, 30000);
};
$scope.stopTimer = function () {
if (angular.isDefined($scope.Timer)) {
$interval.cancel($scope.Timer);
}
};
问题?定时器在离开该状态后仍然存在。我的理解是,当状态离开时, $scope 和控制器本质上被“破坏”。因此,基于此,计时器应该停止(在控制器内,我在移动时取消计时器,这是有效的 - 但如果我导航到差异状态,它仍然存在)。我在这里误解了什么?
我想因为间隔和超时是services http://tutorials.jenkov.com/angularjs/timeout-interval.html在角度中,它们随处可用,但我仍然不明白它们如何在未初始化的控制器中看到函数,除非它被复制。我的解决方案是只使用常规的旧js间隔吗?
清除间隔$destroy https://docs.angularjs.org/api/ng/type/%24rootScope.Scope
像这样
$scope.$on("$destroy",function(){
if (angular.isDefined($scope.Timer)) {
$interval.cancel($scope.Timer);
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)