angularjs中服务的类变量

时间:2014-07-24 14:11:26

标签: angularjs angular-services

我正在开发一个简单的帐户管理页面,用户可以登录,注册等

每个部分都有自己的控制器。即登录页面有一个登录控制器。 这些控制器共享一个公共服务AccountService来处理登录,注册机制。

这是我的AccountService

app.service('AccountService', function($http){
    var user = {};

    this.isLoggedIn = function(){
        return user.isAuth;
    };

    this.login = function(user, callback){
      //...//  
      if(success){
          //Mark user as authenticated
          user.isAuth = true;  
      }
    };  
});

如您所见,如果我通过AccountService.login(user)登录,则变量user.isAuth在成功时设置为true。 但是问题是如果我再调用AccountService.isLoggedIn()我希望函数返回true但它返回undefined

例如,如果我这样做:

app.controller('LoginController', function($scope, AccountService) {
    $scope.login = function(user) {
        //Do Login
        AccountService.login(user, function(r){
            result = r;
        });                            //At this point user.isAuth should be true

        //Check if user is logged in
        console.log(AccountService.isLoggedIn()); //This returns false
    }
}

那么如何在服务中保留变量?


修改 @itcouldevenbeaboat建议在由于异步调用而调用第二个函数之前未设置该值。但是,当我将函数调用彼此分开时,它仍然不起作用:

app.controller('LoginController', function($scope, AccountService) {
    $scope.login = function(user) {
        //Do Login
        AccountService.login(user, function(r){
            result = r;
        });                            //At this point user.isAuth should be true
    }
    $scope.isAuth = function(){
        //Check if user is logged in
        console.log(AccountService.isLoggedIn()); //This STILL returns false
    }
}

当我调用login函数然后调用isAuth

上的LoginController函数时,我仍然会收到错误消息

1 个答案:

答案 0 :(得分:2)

您的登录功能是异步的。在数据返回之前,console.log是否实际运行。

试试这个,

$scope.login = function(user) {
    //Do Login
    AccountService.login(user, function(r){
        result = r;
        console.log(AccountService.isLoggedIn()); //This returns true
    });                            
}