角度服务变量undefined

时间:2015-11-11 17:32:35

标签: angularjs

我正在尝试使用服务从另一个控制器访问当前用户变量。这是我的代码:

服务

angular.module('app').factory('AuthService', function ($http) {
  var currentUser;
});

控制器1:

angular.module('app').controller('Signup', function ($scope, AuthService) {
  AuthService.currentUser = "test@email.com"
});

控制器2:

angular.module('app').controller('Login', function ($scope, AuthService) {
  $scope.user = AuthService.currentUser;
});

查看:

<body ng-controller="Login" ng-cloak>
  <button class="btn btn-link navbar-btn pull-right">{{user}}</button>
</body>

从查看chrome中的开发工具我可以看到“用户”未定义。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

工厂应该返回构成服务的功能或对象。您的工厂定义了一个局部变量,并且不会返回任何内容。所以服务实际上是未定义的。

应该是:

angular.module('app').factory('AuthService', function () {
  return {
    currentUser: null;
  }
});

答案 1 :(得分:1)

更改服务如下。出现此问题是因为有问题的变量不可见。要公开数据,您应该返回一个包含要共享的所有方法和变量的对象。请小心!分享变量是一种很好的做法。使用get和set方法。随着系统的发展,直接对变量行为会导致问题。

angular.module('app').factory('AuthService', function ($http) {
   var currentUser = "";
   return {
       setUser : function(user){
           currentUser = user;
       },
       getUser : function(){
           return currentUser;
       }
   };
});