3

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

这将导致无法解析“resolve:”子句或 $routeProvider 中的人员信息。结果,URL 将更改为 /person_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???
 }
})
4

1 回答 1

2

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

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

以下链接很好地解释了如何处理解析。

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

于 2014-03-18T06:26:32.760 回答