我正在学习Angular.js和UI-router。所以我试图理解:1.如何在一种状态下执行两个不同的操作,具体取决于用户是否登录。2.在几个位置重定向到主页如果用户未登录
下面是示例:有一个服务"Atuhentication"可以计算经过身份验证的用户。但是我无法将其加载到模块.config()中,它会出现错误。
$stateProvider
.state('home', {
// if user is logged in go to state "chat"
// else go to state "welcome"
})
.state('chat', function(){
// if user is not logged in redirect to home page
})
我试图在状态的控制器中制作它,但它是肮脏的方式,因为它加载模板和控制器,然后检查用户是否登录并重定向。
所以亲爱的朋友们,请指明正确的前进方向
您可以随时使用状态更改时广播的事件$stateChangeStart
钩子和阻止状态更改。您可以在整个应用中可用的任何顶级控制器中添加此事件侦听器(例如添加到body
标记的控制器),也可以使用如下所示$rootScope
在任何服务中添加此事件侦听器代码:
var protectedStates = ['home', 'chat'];
$rootScope.$on('$stateChangeStart', function(event, toState, toParams) {
// See if state being transitioned needs to be access checked
if (protectedStates.indexOf(toState.name) > -1) {
if (!userLoggedIn) {
// Prevent the current state from being changed
event.preventDefault();
$state.go('home'); // go to home page or login page.
}
}
});
更多参考: http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state
希望这有帮助!
谢谢
南非