我只是学习ui-router解析,如果用户没有登录,我想简单地重定向我的状态。
似乎我不能简单地在回调函数中使用$state.go
。
这是我的代码:
.state('base.user', {
url: '/user',
templateUrl: 'views/user.html',
controller: 'userCtrl',
resolve: {
test: function($state, $q) {
var deferred = $q.defer();
if (!loggedIn()) { // resolves to false when not logged-in
deferred.reject();
$state.go('base.test'); // ** Throws "Possibly unhandled rejection" error
} else {
deferred.resolve();
/* and maybe do some more stuff.. */
}
}
}
})
我知道这通常是通过服务和类似的东西完成的,但就目前而言,我只想要一个简单的工作示例。
答案 0 :(得分:2)
我们决定处理它的方式是听$stateChangeError
,如果抛出的错误包含路径,那么转到那条路。
$rootScope.$on('$stateChangeError', function(toState, toParams, fromState, fromParams, error) {
if (error.state) {
$state.go(error.state, error.stateParams);
}
});
在你的决心中:
test: function($q) {
var deferred = $q.defer();
if (!loggedIn()) {
deferred.reject({state: 'base.test'});
} else {
deferred.resolve();
}
return deferred.promise;
}
答案 1 :(得分:1)
实现$ stateChangeStart挂钩并检查那里的重定向条件
$rootScope.$on('$stateChangeStart', function (event, toState) {
if (toState.name === 'base.user') {
if(!loggedIn()) { // Check if user allowed to transition
event.preventDefault(); // Prevent migration to default state
$state.go('base.test');
}
}
});