假设我有一条user
路线,并且我已经像这样配置了$routeProvider
:
$routeProvider.when("/user/:id", {
templateUrl: "templates/user.html",
controller: "userController",
resolve: {
user: function(User, $route){
// Assume that User.get(id) will return a promise for user data
return User.get($route.current.params.id);
}
}
});
//...
在某些情况下,user
可能无法解决。例如,用户可能不存在(404),或者当前用户可能无法访问该用户的页面(403),等等。
像大多数网站一样,我想使用自定义错误页面来处理这类错误。
问题是模板已经被提取,我无法将其更改为 " templates / errors / 404.html" 。
我不想将路线重定向到" /pageNotFound.html" 之类的内容,因为它显然不对!我希望路线能够在加载" 404.html" 模板而不是" / user / {id}" 时停留的" user.html"
我提出的一个解决方案是设置错误拦截器,并通过一些有关错误的数据来解决promise,通过它我可以检测到控制器上的错误并将其公开给scope
。因此,我可以在" user.html" 的根目录中使用ng-switch
切换到正常案例和不同错误案例的不同模板。
但我实际上并不喜欢这个解决方案,因为我想为所有路由设置一个全局404模板,因为找不到它们的资源,所以它们的依赖关系都没有被解析。
答案 0 :(得分:1)
templateUrl
可以是一个函数,它将当前params(:id)的对象作为参数,但该函数在解析之前被称为。因此,您可以根据其中的ID进行一些基本检查,但不能使用解析服务调用的结果。