AngularJS-检测、暂停和取消路线更改

AngularJS-检测、暂停和取消路线更改,angularjs,Angularjs,我可以在我的控制器中看到事件$routeChangeStart,但我看不到如何告诉Angular留下来。我需要弹出类似“您想保存、删除还是取消?”的内容,如果用户选择“取消”,我需要停留在当前的“页面”。我没有看到任何允许侦听器取消路线更改的事件。您收听的事件不正确,我在谷歌上搜索了一下,但在文档中找不到任何内容。这方面的快速测试: $scope.$on("$locationChangeStart", function(event){ event.preventDefault(); })

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

您收听的事件不正确,我在谷歌上搜索了一下,但在文档中找不到任何内容。这方面的快速测试:

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

在全局控制器中,阻止位置更改。

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

“$route”服务文档说明,如果任何“resolve”承诺被拒绝,将触发“$routeChangeError”事件。这意味着您可以使用“$routeProvider”指定一个函数,该函数返回一个承诺,如果希望阻止路由更改,该承诺将在以后被拒绝

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

$scope.$watch("$locationChangeStart", function(event){
    event.preventDefault(); 
});
你也可以这样做。这样做的好处是 不会通过带$on的if()语句触发…正如您所看到的 无论条件如何,都将触发以下代码:


但即使被拒绝,浏览器url也会改变。如何处理?您可以使用一个监视根作用域$locationChangeSuccess的服务将位置更改回原来的位置。这就是$route服务在内部使用的功能,但我不知道将来依靠它公开是否完全安全。但是,您现在可以将其与$routeChangeError结合使用以恢复旧位置。也许值得向维护人员询问。@FelikZ供参考,相关的角度问题是如何继续改变?例如-显示消息“您想更改页面吗?”-是-否。在是-继续,在“否”停止。如果您需要访问路由参数,这是不好的。无法从路线更改开始事件中取消路线确实令人恼火。否。根本不取消路线位置更改,AFAICT。event.preventDefault()似乎什么也不做。
if(condition){ //it doesn't matter what the condition is true or false
  $scope.$on("$locationChangeStart", function(event){ //this gets triggered
     event.preventDefault();  
  }); 
}