我尝试使用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;
};