即使在使用ui-router的$state.go
函数与另一个控制器进入不同的状态之后,我仍然遇到旧控制器似乎保持活动状态的问题。
我通过为每个控制器添加一个间隔来测试它,并将其名称记录到控制台。多次更改状态后,所有先前访问过的控制器都保持活动状态:
$interval(function () {
console.info("ACCOUNT")
}, 1000)
答案 0 :(得分:1)
根据官方文档available here,当控制器的范围被销毁时,使用$interval
创建的间隔不会自动销毁。
注意:必须明确销毁此服务创建的间隔 当你完成它们。特别是他们不是 当控制器的范围或指令时自动销毁 元素被破坏了。你应该考虑到这一点 确保在适当的时刻始终取消间隔。
最好听一下示波器的$destroy
事件并销毁在控制器中创建的所有间隔。
这是一个很好的方法。
var intervalRef;
$scope.someFunction = function () {
// Save a reference to the interval's promise so that it can be canceled later
intervalRef = $interval(function () {
console.info("ACCOUNT")
}, 1000);
}
$scope.$on("$destroy", function () {
// When the scope of the controller is destroyed, cancel the interval
if (intervalRef) {
$interval.cancel(intervalRef);
}
});