Angularjs 如何处理$routeProvider的resolve:子句中的异常

Angularjs 如何处理$routeProvider的resolve:子句中的异常,angularjs,error-handling,routes,route-provider,Angularjs,Error Handling,Routes,Route Provider,假设用户需要通过单击指向人员详细信息页面的超链接,从列表页面/人员导航到详细信息页面/人员详细信息?Id=12。同时,另一个用户删除了id为12的person对象 这将导致无法解析“resolve:”子句或$routeProvider中的人员信息。因此,URL将更改为/person\u detail?Id=12,但浏览器仍将显示列表页面 我打赌这是AngularJS的典型问题。URL需要更改才能调用“resolve:”,但当“resolve”失败时,浏览器将以错误的URL结束。有没有一个好的通用

假设用户需要通过单击指向人员详细信息页面的超链接,从列表页面/人员导航到详细信息页面/人员详细信息?Id=12。同时,另一个用户删除了id为12的person对象

这将导致无法解析“resolve:”子句或$routeProvider中的人员信息。因此,URL将更改为/person\u detail?Id=12,但浏览器仍将显示列表页面

我打赌这是AngularJS的典型问题。URL需要更改才能调用“resolve:”,但当“resolve”失败时,浏览器将以错误的URL结束。有没有一个好的通用方法来处理它

下面是说明问题的代码

$routeProvider.when('/people', { //called for list page
 controller: ListController,
   templateUrl: "/List.html",
}).when('/person_detail', { //called for detail page
 controller: DetailController,
 templateUrl: "/Detail.html",
 resolve: {
   return CallAjax($route.current.params.Id); //suppose this function failed???
 }
})

对于resolve属性,可以设置包含承诺的对象映射。您可以在承诺中使用catch子句来处理任何致命错误

或者,您可以侦听$routeChangeError事件。如果任何解决承诺被拒绝,则会广播此消息

下面的链接很好地解释了如何处理resolve


您为什么不在解决方案中做出承诺?承诺将使用.catch子句来处理错误。您能给我一个示例吗?我应该如何处理错误,它会将我的URL还原回/people吗?请查看此链接:。它很好地解释了如何在Resolve中添加有用的承诺。非常感谢$rootScope.$on('$routeChangeError',function(event,cur,prev,rejection){//您可以查看拒绝并根据状态代码执行操作。$location.path('/error')。replace()
$routeChangeError
选项非常棒!