7

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

4

3 回答 3

16

您正在听错误的事件,我做了一些谷歌搜索,但在文档中找不到任何内容。对此的快速测试:

$scope.$on("$locationChangeStart", function(event){
    event.preventDefault();
})

在全局控制器中阻止了位置的改变。

于 2012-12-20T01:25:40.510 回答
2

记录在案的方法是使用路由的 resolve 属性。

'$route' 服务文档说,如果任何 'resolve' 承诺被拒绝,就会触发 '$routeChangeError' 事件。1这意味着您可以使用'$routeProvider' 来指定一个函数,该函数返回一个promise,如果您想阻止路由更改,该promise 稍后会被拒绝。

这种方法的一个优点是可以根据异步任务的结果来解决或拒绝承诺。

于 2013-01-30T17:10:13.390 回答
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();  
  }); 
}
于 2014-02-10T23:45:14.220 回答