0

我正在尝试在 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);
            }
        }}]
    )

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

4

1 回答 1

1

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

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

  controller('Ctrl', function(
    $scope,
    $localStorage
  ){
    $scope.$storage = $localStorage.$default({
      x: 42
    });
  });
</script>
于 2015-05-01T15:55:54.640 回答