Angularjs 如何使用角度工厂在角度控制器之间保持状态

Angularjs 如何使用角度工厂在角度控制器之间保持状态,angularjs,state,factories,Angularjs,State,Factories,我希望在不同的角度控制器之间保持用户状态。我使用JWT进行身份验证,并且可以使用它从每个控制器上的服务器安全地返回用户属性,但每次切换控制器时,这是一个完整的循环 因此,我在UserFactory中添加了以下方法: function getLocalUser() { var localUser = {}; return { isSet:isSet, get:get, set:set }; function isSet(){ return

我希望在不同的角度控制器之间保持用户状态。我使用JWT进行身份验证,并且可以使用它从每个控制器上的服务器安全地返回用户属性,但每次切换控制器时,这是一个完整的循环

因此,我在UserFactory中添加了以下方法:

function getLocalUser() {
  var localUser = {};
  return {
     isSet:isSet,
     get:get,
     set:set
  };
  function isSet(){
      return (Object.keys(localUser).length > 0)
  };
  function get() {
     return localUser
  };
  function set(U){
     Object.keys(U).forEach(function (c,i,a){
     localUser[c] = U[c];
   })
 }
}
UserController登录以便:

function login(username, password) {
  UserFactory.login( username, password).then(function success(response) {
    $scope.vm.loggedInUser = response.data.user;
    $scope.vm.username  = null;
    $scope.vm.password  = null;
    UserFactory.getLocalUser().set($scope.vm.loggedInUser);
  },handleError);
}   
这显然有效,但当我移动到下一个控制器时:

    $scope.vm = {};
    // initialize
    if (UserFactory.getLocalUser().isSet) {
      $scope.vm.loggedInUser = UserFactory.getLocalUser().get();
    } else {
      UserFactory.getUser().then(function success(response) {
        $scope.vm.loggedInUser = response.data;
      });
    }
呼吁

UserFactory.getLocalUser().isSet
再次初始化var localUser={},当然它是空的

我是这里的人,所以请善待我


提前感谢

您还没有测试过它。但看起来您正在创建从userFactory到userController的引用。因此,当userController被销毁时,引用没有指向任何内容

您需要创建对象的副本


betetr解决方案是将您的登录功能移动到userFactory。当userFactory将保存数据而不是userCOntroller时,您只需将
localUser
对象(
var localUser={}
)的初始化从函数
getLocalUser()
中移出,以便只发生一次。如果您仍然被卡住,请显示您的
UserFactory
的所有代码,以便有人可以进一步提供帮助。我认为您最好使用角度服务,将变量“localUser”作为其属性之一(因此它将只初始化一次)。