Javascript 角度ui路由器解析-使用$state.go
我正在学习ui路由器解析,如果用户未登录,我只想重定向我的状态 似乎我不能简单地在回调函数中使用Javascript 角度ui路由器解析-使用$state.go,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在学习ui路由器解析,如果用户未登录,我只想重定向我的状态 似乎我不能简单地在回调函数中使用$state.go 这是我的密码: .state('base.user', { url: '/user', templateUrl: 'views/user.html', controller: 'userCtrl', resolve: { test: function($state, $q) { var deferred = $q.defer(); i
$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.. */
}
}
}
})
我知道这通常是通过服务和类似的事情来实现的,但现在,我只想看一个简单的工作示例 我们决定处理它的方法是侦听
$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;
}
实现$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');
}
}
});