Javascript AngularJS$状态不更改视图

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) }

在我的AngularJS应用程序In run()函数中,如果用户未登录,我希望将其发送到登录页面。以下是代码:

.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。