我正在尝试阻止导航并在控制器中显示弹出窗口。
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
if(someConditionMet) {
event.preventDefault();
showPopup();
}
}
除了标签导航之外,这就像魅力一样。它无法正确阻止导航并导航到选项卡然后显示弹出窗口。由于范围更改弹出窗口无法正确加载并引发异常,因此此处出现了另一个问题。我只看到一个空白的弹出窗口,在此之后无法退出。
编辑 - Plunker演示http://plnkr.co/edit/r8MxO6tDZfTlHPXrVJlM?p=preview
从侧面菜单中按关于它可以正常阻止。然后按设置选项卡。它正试图导航到设置选项卡,然后显示弹出窗口。此外,无法成功加载设置标签。
答案 0 :(得分:2)
我编辑了“设置”状态(名称“tabs.about”,嵌套到“标签”):
.state('tabs.about', {
url: '/about',
controller: 'AboutCtrl',
templateUrl: 'about.html'
});
然后我创建了一个附加到<body>
的新控制器(“mainCtrl”)并在此移动$stateChangeStart
事件处理程序,因此它可以监听事件而不考虑当前状态(以前是在家庭控制器中):
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
var txt = '$stateChangeStart from: '+fromState.name+" to "+toState.name;
console.log(txt);
$rootScope.log = txt;
})
这是一个更新的plunker: