在$ stateChangeStart的回调中无法识别$ state

时间:2014-09-21 08:32:43

标签: angularjs angular-ui-router

我遇到一个问题,我的" on"事件功能。

这是我的代码:

.run(['$rootScope', '$state', function ($rootScope, $state) {

    $rootScope.$on('$stateChangeStart', function (evt, toState) {
        if (!sessionStorage.token)
          $state.go('main');                
    });
}]);

我甚至尝试添加

$rootScope.$state = $state;

但这仍然无法奏效。 我调试它时,我不明白为什么$ state是未定义的。

我看到它在网络上的许多例子中都运行良好。

1 个答案:

答案 0 :(得分:0)

没有理由,为什么$state不应该在.run()中提供。我想还会有其他一些问题。这是a working example,显示了上述内容。

// some simple token holder; until set to tru, only main is accessible
.factory('sessionStorage', function(){return {token: false}})

// we do ask for sessionStorage as well
.run(['$rootScope', '$state', 'sessionStorage', function ($rootScope, $state, sessionStorage) {

    $rootScope.$on('$stateChangeStart', function (evt, toState) {
      if(toState.name === "main"){
        return;
      }
      if (!sessionStorage.token){
        evt.preventDefault();
        $state.go('main');   
      }
    });
}]);

唯一重要的变化是我们确实要求angular注入 sessionStorage 。检查here