Как использовать угловые фабрики для сохранения состояния между угловыми контроллерами

0

Я хочу поддерживать состояние пользователя между разными Угловыми контроллерами. Я использую JWT для аутентификации и могу использовать это, чтобы безопасно возвращать атрибуты User с сервера на каждом контроллере, но каждый раз, когда я переключаю контроллер, это полный круглый robin.

Поэтому я добавил в свой 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 = {} и, конечно, пуст.

Я здесь wannabe, так что будьте добры

заранее спасибо

  • 0
    Вам просто нужно переместить инициализацию вашего объекта localUser ( var localUser = {} ) из функции getLocalUser() чтобы это происходило только один раз. Если вы все еще застряли, покажите весь код для вашей UserFactory чтобы кто-то мог помочь в дальнейшем.
  • 0
    Я думаю, вам лучше использовать угловой сервис, с переменной localUser в качестве одного из его атрибутов (таким образом, он будет инициализирован только один раз).
Теги:
state
factories

1 ответ

0

не проверили его. Но похоже, что вы создаете ссылку с userFactory на userController. Поэтому, когда userController уничтожается, ссылка не указывает на ничего.

Вам необходимо создать копию объекта https://docs.angularjs.org/api/ng/function/angular.copy

Решение betetr должно было бы перевести ваши функции входа в userFactory. Когда userFactory будет хранить данные, а не userCOntroller

Ещё вопросы

Сообщество Overcoder
Наверх
Меню