创建角度服务对象的多个实例

时间:2016-09-09 09:44:43

标签: angularjs service

我是Angular的新手,并开始创建一个示例工作流程。 我有一个角度服务,用于验证用户身份并保留登录的用户详细信息。

修改: 我有两个单独的html页面作为一个整体,这会产生创建两个实例的问题。

studentApp.factory("loginService", function(){
    this.loggedUser="Guest!";
    return{
        checkCredentials : function(user){
            //Authenticating logic goes here.
            this.loggedUser =user.username; 
        }
    };
});

成功登录后,将显示一个主页,并通过再次访问该服务,在html页面上输出登录的用户名。

studentApp.controller("headerController", ["loginService", function(loginService){
      var vm = this;
      vm.loggedUser = loginService.loggedUser;
}]);

但似乎显示的是“Guest”而不是用户名。 我觉得正在创建一个新的服务实例。

2 个答案:

答案 0 :(得分:0)

尝试在工厂使用getter方法 - fiddle

示例 -

app.factory("loginService", function(){
  this.loggedUser="Guest!";
  return{
    checkCredentials : function(user){
        //Authenticating logic goes here.
        this.loggedUser =user; 
    },
    getLoggedUser : function(){
       return this.loggedUser;
    }
  };
});

答案 1 :(得分:0)

我认为您使用不同的控制器进行登录和主页。如果是这样,您在每个控制器中使用this,在每个控制器中创建新的服务实例。

studentApp.factory("loginService", function() {
    return {
    loggedUser : "Guest!",
    checkCredentials: function(user) {
            //Authenticating logic goes here.
            this.loggedUser = user.username;
        }
    };
})

studentApp.controller("headerController", ["loginService", function(loginService){

      $scope.loggedUser = loginService.loggedUser;
}]);



studentApp.controller("LoginController", ["loginService", function(loginService){
         //login and then call checkcredentials(); 
          loginService.checkCredentials("name");
    }]);