2015-07-10 37 views
1

我有一个简单的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是不是一个函数。我认为这是因为帖子已经被退回 - 但我该如何处理?

回答

0

您是否尝试过在$http调用中将cache选项设置为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; 

}]) 
1

那是因为你没有返回$http.get,你.success后返回的承诺和.error已经被处理。

您可以更改控制器调用.then上的回报,或更改服务只返回$http.get(去掉.success.error),并在控制器处理它们。

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