2015-07-10 2 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); 
} 

Контроллер называет завод, и я понимаю, что посты обещает -SO есть некоторые вещи сделанные на успех и некоторые вещи, которые сделаны в любом случае. Это прекрасно работает.

.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

Вы пробовали установить опцию cache в true в вашем звонке $http? Как здесь 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;.

Смежные вопросы