2015-10-04 19 views
17

APIから、私は2つの異なるリストを取る必要があり、サーバーのタイムアウトを避けるために20個のチャンクを取り込む必要があります。私は、オブジェクトのリスト全体をダウンロードしています。このコードで

Items1.query().$promise 
.then(function (data) { 
    $scope.items1 = data.list; 
    return Items2.query().$promise; 
}) 
.then(function (data) { 
    $scope.items2 = data.list; 
}); 

は、私が実際に構築されたことはこれです。

問合せの戻り両方:

{ 
    list: [...], 
    next: true, 
    limit: 20, 
    last: 20 
} 

基本的にはページネーションシステムです。

どちらのサービスも、このようなものです:私は本当に私は例を書いた20

+0

URLのページパラメータを含む別のリソースメソッドとapiエンドポイントが必要なようです – charlietfl

+0

ページネーションを行うためのすべてがあり、うまくいきます。次の値がない限り、各項目のクエリを循環させるだけです'false' –

+0

' query() 'だけが20を返す場合は、開始点を設定する別のメソッドが必要です – charlietfl

答えて

12

のチャンクでそれらの項目をプッシュするために、$資源と再帰関数を作る方法がわからない

App.factory('Items1', ['$resource', 
    function($resource) { 
     return $resource('items1/:item1Id', { storeId: '@id' 
     }, { 
      query: { 
       method: 'GET', 
       isArray: false 
      }, 
      update: { 
       method: 'PUT' 
      } 
     }); 
    } 
]); 

再帰的約束を示すためにjsfiddleあなたはAPI呼び出しでlastパラメータを渡すことができるようにあなたの角度のリソースを変更する必要があります

function getList(resource, list, last) { 
    return resource.query({last: last}).$promise.then(function(data){ 
     list = list.concat(data.list); 
     if (data.next) { 
      return getList(resource, list, data.last); 
     } 
     return list; 
    }); 
} 

getList(Items1, [], 0).$promise.then(function(list) { 
    $scope.items1 = list; 
}); 
getList(Items2, [], 0).$promise.then(function(list) { 
    $scope.items2 = list; 
}); 

:あなたの例のためにそれを変換し、それはのようになりますでしょう。私は、APIがそのパラメータと共に提供されていれば、そこから始まる次のセクションを返すと仮定しています。

+0

素晴らしいです、それはうまく動作し、私はそれを正しく行う方法を理解しています。ご協力いただきありがとうございます。 –