angularjs – locationChangeStart并阻止路由更改

前端之家收集整理的这篇文章主要介绍了angularjs – locationChangeStart并阻止路由更改前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试创建基本验证,无论用户是否可以访问某些路由.
我在这方面取得了进展,但有一点我无法弄清楚.

我正在使用$locationChangeStart来监控路由更改.场景是:
1.如果用户登录,则允许他访问除auth路由(登录,注册)之外的所有路由.我正在通过从我的AuthFactory调用方法isAuthenticated()来检查这个
2.如果用户登录,则只访问登录注册路由.应该防止任何其他路由,并且在这种情况下应该将用户重定向登录.

$rootScope.$on('$locationChangeStart',function(event,newUrl,oldUrl){
  if(AuthFactory.isAuthenticated()){
    if(AuthFactory.isAuthRoute(newUrl)){
      event.preventDefault();
      $location.path('/');
    }
  } else {
    if(!AuthFactory.isAuthRoute(newUrl)){
      event.preventDefault();
      $location.path('/login');
    }

  }
});

让我烦恼的是那个带有preventDefault()的人.如果应用程序到达带有preventDefault()的代码,之后的location.path()就行不通.

但是,如果我删除event.preventDefault(),location.path()工作.问题是,我需要阻止,以防非记录尝试访问某些非auth页面.

基本上,我希望能够根据请求的路线阻止或重定向.这样做的正确方法是什么?

好的,你需要这样做:
var authPreventer = $rootScope.$on('$locationChangeStart',oldUrl){
    if(AuthFactory.isAuthenticated()){
        if(AuthFactory.isAuthRoute(newUrl)){
            event.preventDefault();
            authPreventer(); //Stop listening for location changes
            $location.path('/');
        }
    } 
    else {
        if(!AuthFactory.isAuthRoute(newUrl)){
            event.preventDefault();
            authPreventer(); //Stop listening for location changes
            $location.path('/login');
        }
    }
});

猜你在找的Angularjs相关文章