【发布时间】:2016-11-07 05:26:04
【问题描述】:
我使用 ui-router 定义了我的应用程序状态:
$stateProvider
.state('app', {
abstract: true,
views: {
'nav@': {
templateUrl: 'app/navbar.html',
controller: 'NavbarController',
controllerAs: 'vm'
},
'main@': {
template: '<div ui-view></div>'
}
}
})
.state('child1', {
url: '/child1',
parent: 'app',
templateUrl: 'app/child1.html',
controller: function($timeout) {
$timeout(function() {
alert('from child_1');
}, 15000)
},
controllerAs: 'vm'
})
.state('child2', {
url: '/child2',
parent: 'app',
templateUrl: 'app/child2.html',
controller: 'ctrl_2',
controllerAs: 'vm'
})
当我快速从/child1 转到/child2 时(15000 毫秒之前),我仍然看到child1 控制器中定义的警报,这是正常行为吗?
【问题讨论】:
-
快速是什么意思?
-
@GauravSrivastava 我的意思是在 5 秒之前,即
child1控制器中$timeout函数的第二个参数。 -
超时肯定会起作用。虽然有角度服务,但它是一个窗口事件。您需要清除范围销毁事件中的超时
-
您必须手动取消所有已定义的行为:超时/监视/事件等。
scope.$on('$destroy', ...)就是为此而设计的。
标签: javascript angularjs angular-ui-router