只有在调用工厂函数后,AngularJs才会调用函数

时间:2015-08-14 07:00:39

标签: angularjs factory

我正在尝试使用angularjs中的工厂函数登录用户。 这是我检查登录信息的代码:

$scope.login = function(user) {
    if(!$rootScope.isLoggedIn) {
        LoginService.login($scope.user, $scope);
        console.log($rootScope.isLoggedIn);  
    } else { 
        $location.path('/home');
    }          
}

虽然LoginService工厂服务如下所示:

.factory('LoginService', ['$http', '$location', '$rootScope', function($http,$location, $rootScope) {
    return {
        login: function(user, scope) {
            $rootScope.processGoingOn = true;
            var $promise = $http.post('user.php', user);   
            $promise.then(function(msg) {
                var responseData = msg.data;
                console.log(responseData);
                if(responseData['login_success'] == 'true') { 
                    $rootScope.isLoggedIn = true;                    
                    $rootScope.processGoingOn = false; 
                    // success redirect
                } else {
                    $rootScope.isLoggedIn = false;
                    $rootScope.processGoingOn = false; 
                    // try login again 
                }        
            });
        }
        ....
    }
});

$rootScope.isLoggedIn中的更改未反映$scope.login()功能成功或失败,是否有任何建议?

1 个答案:

答案 0 :(得分:0)

这是因为在解析promise之前会返回登录功能。

在做这个的路上可以像这样返回$ promise

login: function(user, scope){
    $rootScope.processGoingOn = true;
    return $http.post('user.php', user);   
}

然后拨打console.log($rootScope.isLoggedIn);