我试图通过网址首次进入我的网站时重定向未经授权的人;
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')
}
})
}])
答案 0 :(得分:1)
查看此处的文档(http://github.com/angular-ui/ui-router/wiki#state-change-events),您应该在执行新转换之前致电event.preventDefault()
取消导航。