18

JSON データを次の形式で返す API を使用しています。

{
    paging: {
        previous: null,
        next: null
},
    data: [
        { title: 'First Item' },
        { title: 'Second Item' },
        ...
    ]
}

このデータを取得するためにAngular の$resourceサービスを使用しています。
コントローラーにある私のコードは、次のようになります。

var Entity = $resource('/api/entities');
var entities = $scope.entities = Entity.get();

ビューでは、次のようにデータを表示できます。

<ul>
  <li ng-repeat="entity in entities.data">{{entity.title}}</<li>
</ul>

すべて正常に動作しますが、次の点に注意してください。

  • entities.dataオブジェクト全体ではなく、コンテンツのみをビューに公開したいと思いentitiesます。GET リクエストによって返されたデータをインターセプトして、データが入力される前に変更するにはどうすればよい$scope.entitiesですか?
  • 相関する質問: データの配列Entity.query()を取得しているので、代わりに使用する方がクリーンですEntity.get()。しかし、Entity.query()上記のコードで使用すると、「TypeError: Object # has no method 'push'」というエラーが発生します。API は配列ではなくオブジェクトを返すため、これは理にかなっています (したがって、オブジェクトに対する「プッシュ」メソッドはありません)。.data繰り返しになりますが、応答から属性を抽出できれば、配列が得られます。

Dan Boyon によるこれらの指示に従って、デフォルトの$resourceサービスをカスタマイズし、.get() または .query() メソッドをオーバーライドすることができましたが、そこからどこへ行くべきかわかりません。

4

2 に答える 2

24

getまたはqueryのデフォルトを変更する必要はないと思います。成功コールバックを使用して、必要なことを実行するだけです。同様に、より堅牢である必要があります。

Entity.get(
    {}, //params
    function (data) {   //success
        $scope.entities = data.data;
    },
    function (data) {   //failure
        //error handling goes here
    });

HTMLもよりクリーンになります:

 <ul>
      <li ng-repeat="entity in entities">{{entity.title}}</<li>
 </ul>

ちなみに、私は通常、リソースのサービスを宣言し、必要に応じてそれらをコントローラーに注入します。

 myServices.factory('Entity', ['$resource', function ($resource) {
     return $resource('/api/entities', {}, {
     });
 }]);
于 2012-08-08T02:07:05.763 に答える