2

私は安らかなAPIとangularjsアプリを持っています。工場内で $resource を使用して、この API を操作しています。1 つのリクエストに問題があります。いくつかの要素を作成するために API を POST します。

/api/service/thing/make-things

リクエストにいくつかのデータを渡す必要があります。これが私がやっていることです:

$scope.someRequest = new SomeRequest(); // factory object returning an $resource
$scope.someRequest.some_field = 'abc';
$scope.someRequest.$save({someAdditionalParams:'123'}, function(values){...handling response...});

正常に動作し、投稿したいデータを投稿しますが、この特定のケースでは、投稿応答はオブジェクトの配列です。

[{somestuff:'123'}, {somestuff:'321'} ... ]

Angular はそれをオブジェクトにマップし直そうとし、オブジェクトが予期されていたが配列を取得したというエラーをスローします。isArray:1 で別のリソース メソッドを作成しようとしましたが、同じ種類のエラーで失敗しました。

だから、私の質問は次のとおりです。この状況をどのように処理しますか? $save の結果を $resource オブジェクトにコピーするのをキャンセルすることはできますか?

4

1 に答える 1

5

$save を使用して、マップを元に戻そうとします。結果をマップし直そうとしない isArray:true を使用して、新しいアクションを作成できます。もちろん、結果を手動で処理する必要があります。

var someRequest = $resource('/api/service/thing/make-things',{'create':   {method:'POST', isArray:true}});
someRequest.create({some_field = 'abc',someAdditionalParams:'123'},function(data){
    $scope.someRequestArray = data;
});

真の RESTful アーキテクチャは、作成されたものを返すことになっているため、 $save はそのように機能します。ニーズはわずかに異なるため、カスタム アクションが必要です。

于 2013-09-06T20:19:58.093 に答える