假设我有一个 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"。
注意事项 1:
我不想将路由重定向到类似"/pageNotFound.html" 的地方,因为这显然是不对的!我希望路线在加载 "404.html" 模板而不是 "user.html" 时保持在 "/user/{id}">.
注2:
我想出的一个解决方案是设置一个错误拦截器,并使用一些关于错误的数据 resolve promise,通过它我可以检测到 Controller 上的错误并将其暴露给 scope
。因此,我可以在 “user.html” 的根部使用 ng-switch
,它可以针对正常情况和不同的错误情况切换到不同的模板。
但我实际上并不喜欢这种解决方案,因为我想为所有由于未找到其资源而未解决其依赖关系的路由设置一个全局 404 模板。
最佳答案
templateUrl
可以是一个将当前参数 (:id) 的对象作为参数的函数,但该函数在 解析之前被调用。因此,您可以根据此处的 ID 进行一些基本检查,但不使用解析服务调用的结果。
关于javascript - 使用ng-route时根据依赖关系加载不同的模板解决错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27679605/