Angular JS $ http请求 - 缓存成功响应

时间:2015-07-10 11:19:42

标签: javascript angularjs ionic

我有一个简单的dataFactory来检索一些帖子:

dataFactory.getPosts = function () {
    if (this.httpPostsData == null) {
        this.httpPostsData = $http.get("http://localhost/matImms/wp-json/posts?type=journey&filter[posts_per_page]=-1&filter[order]=ASC&filer[orderby]=date")
            .success(function (posts) {

            })
            .error(function (posts) {
                console.log('Unable to load post data: ' + JSON.stringify(posts));
            });
    }

    return (this.httpPostsData);
}

控制器呼叫工厂,我知道帖子是承诺 - 所以有一些事情是成功完成的,有些事情已经完成了。这很好。

.controller('CardsCtrl', function($scope, dataFactory,
        $ionicSlideBoxDelegate, $stateParams) {

    var parentID = $stateParams.parentID;
    var keyIDNumber = $stateParams.keyID;

    $scope.card = [];

    var httpcall = dataFactory.getPosts()
        .success(function (posts) {
            $scope.card = dataFactory.getChildPosts(parentID, posts, keyIDNumber);

            $ionicSlideBoxDelegate.update();
        });

    // do other stuff ......
});

但是,我现在正在尝试缓存帖子数据 - 但是当第二次调用控制器时它会返回错误.success不是一个函数。我认为这是因为帖子已经被退回 - 但我该如何处理呢?

2 个答案:

答案 0 :(得分:1)

由于您未返回$http.get,因此您已在.success.error处理完毕后返回承诺。

您可以更改控制器以在返回时调用.then,或将服务更改为仅返回$http.get(删除.success.error)并处理他们在控制器中。

如果您将控制器更改为使用.then,则还需要将服务中的.success功能更新为return posts;

答案 1 :(得分:0)

您是否尝试在cache来电中将$http选项设为true?像这里https://stackoverflow.com/a/14117744/1283740

也许是这样的......

angular.module('foo', [])

.factory('dataFactory', ['$http', function($http){

  var dataFactory = {
          getPosts: getPosts
      };

  function getPosts(){

    var url = "http://localhost/matImms/wp-json/posts?type=journey&filter[posts_per_page]=-1&filter[order]=ASC&filer[orderby]=date"

    return $http({ cache: true, url: url, method: 'GET'})
      .error(function (posts) {
        console.log('Unable to load post data: ' + JSON.stringify(posts));
      });

  };

   return dataFactory;

}])