2015-07-19 62 views
0

那么,我来自ngRoute的背景,我刚开始学习uiRouter处理4xx错误,加上登录,同时使用uiRouter

我曾经为登录(login.html)编写两个不同的角度应用程序,一个用于主应用程序(index.html)。在他的后端,我只是检查用户是否通过身份验证,然后将其重定向到index.html,否则将其重定向到login.html。

现在我想封装登录到主应用程序。我有很多需要用户登录的状态。在很多状态下,页眉和页脚等部分都是固定的。我正在寻找一个具体的解决方案与这些考虑来处理它:

  • 我不想使用resolve财产所有需要身份验证的状态。
  • 我不希望我的路由像/some-prefix-for-authed-paths/...那样需要身份验证的状态。
  • 如果有人导航到需要验证的路由,我想将它们重定向到登录页面,登录后我想将它们重定向到它们以前的位置。
  • 对于4xx错误,我想显示一个自定义错误页面(可能与路由有关)。例如,如果有人导航到/ users/3,并且没有用户3,(这将由状态的解析属性确定,如果不存在用户,这将被拒绝)我想向他们显示错误页面,但我不要想改变路线,如/error什么的,因为它实际上没有任何意义!另外,我不想在浏览器历史中推动状态。

回答

0

您可以尝试实现一个httpInterceptor,它捕获所有非2xx请求并重定向到某种错误/登录页面。

也是一种检验认证,你可以使用uiRouter onStateChange事件通过添加访问级别的状态

.state('someState', { 
    url: '/someUrl', 
    isPrivate: true 
}) 

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams){ 
     event.preventDefault(); 

     // Check if state is private 
     if(toState.isPrivate) { 
       // Do something 
     } 
}); 

注意!这只是一些伪代码

+0

谢谢,但正如我提到的问题,我不想**错误的情况下**重定向。 –

+0

对不起。当然,当这些事件发生时你不必重定向。您可以使用$ rootScope。$ broadcast()引发另一个事件,并让一些指令监听此操作并相应地操作DOM。 – soaP