javascript - localStorage 中的 Angular 缓存

标签 javascript angularjs local-storage angular-local-storage

我正在尝试用 Angular 编写一个服务,将数据缓存到 localStorage,但没有成功!我需要你的帮助。我有几种不经常更改的“查找”数据类型,例如经纪人代码和航空公司代码。

我记得在我的一本(很多!)技术书籍中读到,可以对任何数据类型进行 promise ,并且我正在采用这种方法来编写我的服务。本质上,我想从 localStorage 返回值(如果存在),然后立即返回并带有已解决的 promise 。或者,如果它不存在,我想 $http.get() 它并返回从此调用返回的 promise 。

我的伪代码如下所示:

angular.module('myApp')
    .service("lookupDataService", function() {
        this.brokers = function() {
            var cachedBrokers = localStorage.getItem("brokers");

            if (!cachedBrokers) {
                $http.get('/api/brokers')
                    .success(function(data) {
                        localStorage.setItem("brokers", data);
                        // return promise
                    });
            } else {
                var deferred = $q.defer();
                deferred.resolve();
                // shoehorn the data from localStorage
                return deferred;
            }
        }
    })

这种方法合理吗?如何向调用行为返回 promise 和数据?

编辑

我意识到我没有正确执行依赖注入(inject)。我已将伪代码修改为如下所示:

angular.module('myApp')
    .service("lookupDataService", ['$q','$http', function($q, $http) {
        this.brokers = function() {
            var cachedBrokers = localStorage.getItem("brokers");

            if (!cachedBrokers) {
                return $http.get('/api/brokers')
                    .success(function(data) {
                            localStorage.setItem("brokers", data);
                        }
                    );
            } else {
                return $q.when(cachedBrokers);
            }
        }}]
    )

我突然想到,在内部 promise 得到解决之前,我的方法不会返回 promise 。我认为。令人头疼的时刻。

中号

最佳答案

我会研究 NGStorage,http://ngmodules.org/modules/ngStorage .

    <script>
  angular.module('app', [
    'ngStorage'
  ]).

  controller('Ctrl', function(
    $scope,
    $localStorage
  ){
    $scope.$storage = $localStorage.$default({
      x: 42
    });
  });
</script>

关于javascript - localStorage 中的 Angular 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990323/

相关文章:

javascript - Meteor/Semantic-UI 中的错误?

javascript - Node.js 调用函数要求

c# - 无法使用 SendGrid 在 iOS 上打开电子邮件中的通用链接

local-storage - Laravel 5.4 : save files with real name

javascript - 与 EmberJS/Data 关联的替代方案

javascript - jQuery切换允许父元素的默认href并且父元素应该显示子元素(切换)

javascript - 在文本字段内移动插入符号位置

angularjs - $parser.unshift??这是如何工作的?

javascript - 在 angularjs Controller 中使用 html

javascript - Backbone.js - 如何将集合保存到 localStorage?