javascript - 使用ng-route时根据依赖关系加载不同的模板解决错误

标签 javascript angularjs ngroute

假设我有一个 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/

相关文章:

Javascript 在将数字相加时只给出整数

javascript - 如果只有本地 Angular 应用程序调用它为真 Controller ,则执行路由

javascript - Angular JS/IONIC 读取 JSON 文件

javascript - Angular Url Provider 和 mmenu 不能一起工作

angularjs 1.6.0(现在最新)路线不起作用

javascript - 谷歌 JavaScript 电子表格

javascript - 强制浏览器重新加载页面(忽略缓存)

angularjs - Cordova 后退按钮 PreventDefault 不起作用

javascript - ngRoute 的模块依赖性破坏了 Angular 渲染

javascript - react 登录页面