路线更改,但查看不是路由器

时间:2014-08-15 22:02:53

标签: angularjs authentication redirect angular-ui-router

我试图通过网址首次进入我的网站时重定向未经授权的人;

eg: example.com/#/order应该重定向到example.com/#/auth,这包括他们第一次访问网页并在州之间导航时。

目前我有一个抽象的父状态/order/auth,它们已经解析检查身份验证和否则重定向。我也在$stateChangeStart事件上观察同样的事情。

最初加载页面时的代码正常运行,如果您在未登录的情况下访问/order/restaurant,则会重定向,但如果我在网址/auth/login上,我可以更改我的url到/order/resturant,它会重定向我成功,但视图不会更新。我仍然可以看到/order/resturant页面但是解决了分页和页面更改的问题。为什么会这样?我试图使用$rootScope.$apply()也没有成功。

我的代码如下为父状态:

// Authentication Urls
.state('auth', {
  url: '/auth',
  templateUrl: 'modules/auth/auth.html',
  abstract: true
})

// Order Urls
.state('order', {
  url: '/order',
  templateUrl: 'modules/order/order.html',
  abstract: true
})

和我的代码来观察stateChange

.run(['$rootScope', '$location', 'Auth', function($rootScope, $state, Auth) {
  $rootScope.$on('$stateChangeStart', function(event, toState) {
    var stateName = toState.name
    console.log('State start')

    if (!stateName.match(/auth/) && !Auth.isLoggedIn) {
      console.log('User is not visiting auth and isn\'t logged in, redirecting....')
      $state.go('auth.login')

    } else if (Auth.isLoggedIn && stateName.match(/auth/)) {
      console.log('User is logged in and is on the auth page, redirecting....')
      $state.go('order.resturant')
    }
  })
}])

1 个答案:

答案 0 :(得分:1)

查看此处的文档(http://github.com/angular-ui/ui-router/wiki#state-change-events),您应该在执行新转换之前致电event.preventDefault()取消导航。