【问题标题】:Refresh Angular JS Factory without page Re-load在没有页面重新加载的情况下刷新 Angularjs 工厂
【发布时间】:2016-10-03 05:44:11
【问题描述】:

我正在通过 angularjs 中的工厂访问存储在本地存储中的数据。在页面加载时,工厂从本地存储加载和访问数据,并将它们存储在变量中。我可以调用该工厂并获取变量中的值。

但是,每当我在本地存储值更改后调用工厂时,工厂都会返回旧值而不是新值。有没有办法刷新工厂,以便它再次获取本地存储值而不刷新整个页面?

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 时,函数更改 localstorage 值后的 userFactory.userName 返回旧值而不是新值。请帮忙

【问题讨论】:

  • 只要您的本地存储值发生更改,以后每当您尝试通过工厂/服务访问该值时,它都假定采用新更新的值。如果不是 theb,我不确定我是否完全理解您的观点。
  • 是的,您可以在本地存储值更改时存储它并将其设置为工厂,然后尝试访问
  • 嗯,你可以在工厂有一个更新方法,从本地存储中获取最新数据并更新变量。您可以在更新本地存储时调用此方法。
  • 为什么直接通过localStorage更新数据,而不是通过服务?

标签: javascript angularjs factory angularjs-factory


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2017-08-13
    • 2013-10-09
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多