2015-07-10 57 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;