首页 > 解决方案 > 在控制器加载之前关闭路由更改的所有 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。

标签: angularjs

解决方案


事实证明,在使用 UI-Router 时,我使用的侦听器不是最理想的。事实上,我什至无法阻止监听器的状态变化。
相反,当使用 UI-Router 时,$transitions.onStart()应该用于监听状态变化。


推荐阅读