AngularJS - 检测,停止和取消路线变化

时间:2012-12-19 22:30:55

标签: angularjs

我可以在控制器中看到事件$routeChangeStart,但我不知道如何告诉Angular留下来。我需要弹出类似“你想保存,删除还是取消?”的内容。如果用户选择取消,则保持当前“页面”。我没有看到任何允许听众取消路线更改的事件。

3 个答案:

答案 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();  
  }); 
}