angularjs - 在控制器加载之前关闭路由更改的所有 UI 引导模式(angularjs)
问题描述
模态关闭代码(来自 SO):
$rootScope.$on('$locationChangeStart', x => $uibModalStack.dismissAll("location change dismiss all"));
此侦听器仅在应用程序运行时创建一次,并在位置更改时正确关闭所有模式。但是,我的问题是它是在从新路由加载控制器之后执行的,它正在创建一个模式:
app.controller(..., function(...){
...
dialog.create(template, 'DocumentSearchDialogController', {groups: documentGroups, callback: callback}, 'lg')
(在哪里dialog
是一个简单的包装器$uibModal
)
因此创建了模态,然后由侦听器立即关闭。我不希望这样 - 我希望侦听器在控制器创建模态之前清除模态。
我找到了一种解决方法:将模态创建包装在将其$timeout(..., 0)
延迟到下一个摘要/应用,这发生在控制器和侦听器都执行了所有代码之后。这并不理想 - 我想在初始化控制器之前简单地清除模式,理想情况下,根本不接触任何控制器。
编辑:我正在使用 UI-Router。
解决方案
事实证明,在使用 UI-Router 时,我使用的侦听器不是最理想的。事实上,我什至无法阻止监听器的状态变化。
相反,当使用 UI-Router 时,$transitions.onStart()
应该用于监听状态变化。