我可以在控制器中看到事件$routeChangeStart
,但我不知道如何告诉Angular留下来。我需要弹出类似“你想保存,删除还是取消?”的内容。如果用户选择取消,则保持当前“页面”。我没有看到任何允许听众取消路线更改的事件。
答案 0 :(得分:16)
你正在听错事件,我做了一些谷歌搜索,但在文档中找不到任何东西。快速测试一下:
$scope.$on("$locationChangeStart", function(event){
event.preventDefault();
})
在全局控制器中阻止位置更改。
答案 1 :(得分:2)
记录的方法是使用路由的resolve属性。
'$ route'服务文档说如果任何'resolve'承诺被拒绝,就会触发'$ routeChangeError'事件。1这意味着你可以使用'$ routeProvider'来指定一个函数如果你想阻止路线改变,它会返回一个后来被拒绝的承诺。
此方法的一个优点是可以根据异步任务的结果解决或拒绝承诺。
答案 2 :(得分:0)
$scope.$watch("$locationChangeStart", function(event){
event.preventDefault();
});
你也可以这样做。这样做的好处就是它 如你所见,不会通过带有$ on的if()语句触发... 无论条件是什么,下面的代码都会触发:
if(condition){ //it doesn't matter what the condition is true or false
$scope.$on("$locationChangeStart", function(event){ //this gets triggered
event.preventDefault();
});
}