如何在离开 ui 状态时停止 $interval?
How to stop $interval on leaving ui-state?
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 和控制器在离开状态时本质上是 "destroyed" 。因此,基于此,计时器应该停止(在控制器内,我在四处移动时取消计时器,这是有效的 - 但如果我导航到 diff 状态,它会持续存在)。我在这里误解了什么?
我猜因为interval和timeout在angular中是services,它们随处可见,但我仍然不明白它们如何看待未初始化的控制器中的功能,除非它被复制.我的解决方案是只使用常规的好旧 js 间隔吗?
在 $destroy
上清除间隔
喜欢这个
$scope.$on("$destroy",function(){
if (angular.isDefined($scope.Timer)) {
$interval.cancel($scope.Timer);
}
});
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 和控制器在离开状态时本质上是 "destroyed" 。因此,基于此,计时器应该停止(在控制器内,我在四处移动时取消计时器,这是有效的 - 但如果我导航到 diff 状态,它会持续存在)。我在这里误解了什么?
我猜因为interval和timeout在angular中是services,它们随处可见,但我仍然不明白它们如何看待未初始化的控制器中的功能,除非它被复制.我的解决方案是只使用常规的好旧 js 间隔吗?
在 $destroy
喜欢这个
$scope.$on("$destroy",function(){
if (angular.isDefined($scope.Timer)) {
$interval.cancel($scope.Timer);
}
});