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

时间:2014-03-18 01:30:04

标签: angularjs error-handling routes route-provider

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

这将导致无法解决人员信息,并解决:"子句或$ routeProvider。因此,URL将更改为/ person_detail?Id = 12,但浏览器仍将显示列表页面。

我敢打赌这是AngularJS的一个典型问题。 URL需要更改才能调用&#34;解决:&#34;,但是当&#34;解决&#34;失败后,浏览器会以错误的URL结束。是否有一个很好的通用方法来处理它?<​​/ p>

以下是说明问题的代码

$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???
 }
})

1 个答案:

答案 0 :(得分:2)

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

或者你可以听$ routeChangeError事件。如果任何解决承诺被拒绝,则广播。

以下链接很好地解释了如何解决问题。

http://blog.brunoscopelliti.com/show-route-only-after-all-promises-are-resolved