Обновить Angular JS Factory без перезагрузки страницы

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

Однако всякий раз, когда я вызываю фабрику после изменения значений localstorage, фабрика возвращает старое значение вместо нового значения. Есть ли способ обновить фабрику, чтобы она снова извлекала значения из локального хранилища без обновления всей страницы?

Javascript-код..

headerApp.factory('userFactory', ['$rootScope', function($rootScope){
    var dataFactory = {};
    dataFactory.user = localStorage.getItem("valueA");
    dataFactory.userName = localStorage.getItem("valueB");
    dataFactory.userAccessToken = localStorage.getItem("valueC");
    return dataFactory;
}]);

При вызове userFactory.user userFactory.userName после того, как функция изменяет значения localstorage, возвращает старые значения вместо новых. Пожалуйста помоги


person Lucy    schedule 03.10.2016    source источник
comment
До тех пор, пока значение вашего локального хранилища изменяется, а затем всякий раз, когда вы пытаетесь получить доступ к этим значениям через фабрику/службу, предполагается, что они будут принимать новые обновленные значения. Если это не так, я не уверен, что полностью понял вашу точку зрения.   -  person Pravin Erande    schedule 03.10.2016
comment
И да, вы можете сохранить значение локального хранилища всякий раз, когда оно изменяется, и установить его на заводе, а затем попытаться получить доступ   -  person Pravin Erande    schedule 03.10.2016
comment
Что ж, у вас может быть метод обновления на заводе, который получает последние данные из локального хранилища и обновляет переменные. Вы можете вызывать этот метод всякий раз, когда обновляете локальное хранилище.   -  person Ravi Teja    schedule 03.10.2016
comment
Почему вы обновляете данные напрямую через localStorage, а не через сервис?   -  person Alexander Anikeev    schedule 03.10.2016


Ответы (1)


Как насчет того, чтобы переместить код, в котором вы извлекаете информацию из локального хранилища, в функцию на фабрике, а затем каждый раз, когда вы обновляете какое-либо локальное хранилище, вы также вызываете эту функцию для обновления dataFactory?

headerApp.factory('userFactory', ['$rootScope', function($rootScope){
  var dataFactory = {};

  this.updateUser();
  this.updateUserName();
  this.updateAccessToken();

  updateUser () {
    dataFactory.user = localStorage.getItem("valueA");
  }

  updateUserName () {
    dataFactory.userName = localStorage.getItem("valueB");
  }

  updateUserAccessToken () {
    dataFactory.userAccessToken = localStorage.getItem("valueC");
  }

  return dataFactory;
}]);

И затем в любой момент, скажем, имя пользователя было изменено на стороне локального хранилища, вы можете вызвать this.userFactory.updateUserName(); для обновления dataFactory.userName.

person Caleb    schedule 03.10.2016