Javascript AngularJS$状态不更改视图
在我的AngularJS应用程序In run()函数中,如果用户未登录,我希望将其发送到登录页面。以下是代码:Javascript AngularJS$状态不更改视图,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,在我的AngularJS应用程序In run()函数中,如果用户未登录,我希望将其发送到登录页面。以下是代码: .run(['$state', function($state) { $state.go('signin') .then(function(promise){}, function(reject) { console.log(reject) }
.run(['$state', function($state)
{
$state.go('signin')
.then(function(promise){},
function(reject)
{
console.log(reject)
}
);
}]);
在控制台中,我得到以下信息:
Error: transition superseded {stack: (...), message: "transition superseded"}
$state.transition('signin')
都不起作用。有人知道为什么会发生这种情况吗,我从来没有遇到过这种情况。我想你的问题可能是状态仍然没有加载,所以你无法进入该状态
解决方案是将超时设置为0,以便在堆栈为空后运行
试试这个:
.run($timeout, $state, ...) {
$timeout(function() {
$state.go('signin');
},0);
或者类似的
参考自:
我认为您应该在
$stateProvider
中检查身份验证,而不是run()
。您可以这样做:
$stateProvider
.state('auth', {
abstract: true,
resolve: {
user: ['auth', '$q', function (auth, $q) {
if (auth.isAuthenticated()) {
//...
} else {
//...
}
}]
}
})
我同意,这更有意义。我通常在我的基本控制器中使用$watch。Hanks,我使用了你的示例,然后我只需在$stateChangeError上的run()函数中进行侦听,然后我将view更改为signin。