[英]Route changes but view doesn't ui-router
我试图重定向未经授权的人,当他们第一次通过URL进入我的网站时;
eg: example.com/#/order
应该重定向到example.com/#/auth
,这包括他们何时首次访问网页以及在各个状态之间进行导航。
目前,我有一个抽象的父状态/order
和/auth
,这些状态可以解决检查身份验证和重定向的问题。 我还监视$stateChangeStart
事件来执行相同的操作。
最初加载页面时的代码可以正常工作,如果您访问/order/restaurant
而没有登录,它将重定向,但是,如果我使用的是url /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')
}
})
}])
在此处查看文档( http://github.com/angular-ui/ui-router/wiki#state-change-events )之前,应在执行新过渡之前通过调用event.preventDefault()
取消导航。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.