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

#javascript #angularjs #factory #angularjs-factory

#javascript #angularjs #фабрика #angularjs-фабрика

Вопрос:

Я получаю доступ к данным, хранящимся в локальном хранилище, через фабрику в 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 возвращает старые значения вместо новых. Пожалуйста, помогите

Комментарии:

1. До тех пор, пока значение вашего локального хранилища изменяется, и позже всякий раз, когда вы пытаетесь получить доступ к этим значениям через factory / service, предполагается, что оно принимает новые обновленные значения. Если это не theb, я не уверен, что полностью понял вашу точку зрения.

2. И да, вы можете сохранять значение вашего локального хранилища всякий раз, когда оно изменяется, и устанавливать его на завод, а затем пытаться получить доступ

3. Ну, у вас может быть метод обновления на заводе, который получает последние данные из локального хранилища и обновляет переменные. Вы можете вызывать этот метод всякий раз, когда обновляете локальное хранилище.

4. Почему вы обновляете данные напрямую через localStorage, а не через сервис?

Ответ №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 .