$ state.go()在Firefox中工作但在Chrome中没有

时间:2015-10-24 08:49:54

标签: angularjs google-chrome firefox angular-ui-router passport-local

我尝试使用ui-router的$ state.go()方法将用户重定向到信息中心/主页视图。它在Firefox中完美运行,但在Chrome中,它仅适用于第二次点击登录按钮。第一次点击,它就会坐在那里。有时,第二次点击仍然不会启动状态转换。

以下是我使用的登录代码:'

$scope.login = function(user){
    $http.post('/user/login', {
        "username": user.username,
        "password": user.password
    })
    .then(function(user){
        $log.log(user); 
        $state.go('dashboard');
    }, function(err){
        if(err) $state.go('login'); 
    });
}

我不明白为什么在Chrome中它有时会在第二次点击登录按钮后工作?它也没有抛出任何错误。控制台很干净,它正确地在控制台中记录我的用户,因此我知道正在访问$ state.go()方法。它没有正确射击。

我在这里找不到有类似问题的人了。

我使用的是ui-router和Passport。我可以获得$ state.go()和ui-router sref链接在我的应用程序中的其他地方工作,没有任何问题,但这个登录重定向正在杀了我。

这是我尝试加载的路线

  .state('dashboard', {
url: '/dashboard', 
templateUrl: 'app/main/main.html', 
controller: 'MainController',
resolve: {
  loggedIn: checkLoggedin
}
})

这里也是我使用的checkLoggedIn方法。

  var checkLoggedin = function($q, $timeout, $http, $location, $rootScope, $state){ 
    var deferred = $q.defer(); 
    $http.get('/user').success(function(user){ 
      // Authenticated 
      if (user !== "") {
        deferred.resolve();
      }else { 
        //Not authenticated
        $rootScope.message = 'You need to log in.'; 
        deferred.reject(); 
        $state.go('login'); 
      } 
    }); 
    return deferred.promise; 
  };

0 个答案:

没有答案