要解决这个问题,您可以在AngularJS中使用$interval而不是原生的setInterval函数,并在controller中使用$rootScope.$on('$destroy', ...)来清除$interval。
以下是一个示例代码:
// 在controller中定义一个变量来存储$interval对象
var intervalPromise;
// 在controller中使用$interval代替setInterval
intervalPromise = $interval(function() {
// 每秒执行的代码
console.log("Interval is still working...");
}, 1000);
// 在controller销毁时清除$interval
$scope.$on('$destroy', function() {
// 清除$interval
if (intervalPromise) {
$interval.cancel(intervalPromise);
}
});
// 在某个事件触发时清除$interval
$scope.clearInterval = function() {
if (intervalPromise) {
$interval.cancel(intervalPromise);
console.log("$interval has been cleared.");
}
};
在上面的示例中,我们首先在控制器中定义了一个变量intervalPromise
来存储$interval对象。然后,我们使用$interval代替setInterval来创建一个定时器。接下来,在controller销毁时,我们使用$scope.$on('$destroy', ...)
来监听控制器销毁事件,并在事件发生时清除$interval。您还可以在其他事件中调用$interval.cancel(intervalPromise)
来手动清除$interval。