【问题标题】:Angular caching in localStoragelocalStorage 中的角度缓存
【发布时间】:2015-07-11 11:44:15
【问题描述】:

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

我记得在我的一本(很多!)技术书籍中读到,可以围绕任何数据类型包装承诺,并且我在编写我的服务时采用了这种方法。本质上,如果它存在,我想从 localStorage 返回值,然后立即返回一个已解决的承诺。或者,在它不存在的情况下,我想 $http.get() 它并返回此调用返回的承诺。

我的伪代码如下所示:

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;
            }
        }
    })

这种方法合理吗?如何将承诺和数据返回给调用行为?

编辑

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

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);
            }
        }}]
    )

我突然想到,在解决内部承诺之前,我的方法没有返回承诺。我想。令人头疼的时刻。

M

【问题讨论】:

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


【解决方案1】:

我会调查 NGStorage,http://ngmodules.org/modules/ngStorage

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

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

【讨论】:

  • 看起来不错,但它似乎是与 localStorage 不同的接口,我对此没有问题。我的问题是在数据已经存在于缓存中的情况下,构建承诺并将已解决的承诺与数据一起返回给服务调用者。
  • 我也推荐使用 ngStorage,让生活变得更加轻松,如果需要,它们还有大量文档可以帮助您。如果您有时间,也许值得检查一下 ngBook! ng-book.comgithub.com/gsklee/ngStorage
  • 好吧,但目前我专注于承诺......;|
  • 如果这是为了学校,是的。但如果这是用于工作环境,请使用 NGStorage...
  • @TGarrett -- 我正在评估这个 ngStorage...我不会使用它,因为它直接连接到 $scope,据我所知。它看起来非常紧密耦合。如何在服务中使用它?如果我想获取文件然后将其设置到本地存储怎么办?
猜你喜欢
  • 2018-03-17
  • 2022-01-25
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多