ricick からの提案は良いものですが、返される配列に実際にメソッドが必要な場合は、それを行うのが難しくなります。基本的に必要なことは、$resource とそのインスタンスの周りにちょっとしたラッパーを作成することです。あなたが遭遇する問題は、angular-resource.js からの次のコード行です。
var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data));
ここで $resource からの戻り値を設定します。何が起こるかというと、ajax リクエストの実行中に「値」が取り込まれて返されます。ajax リクエストが完了すると、値は上記の「値」に返されますが、参照によって (angular.copy() メソッドを使用して) 返されます。配列の各要素 (query() などのメソッドの場合) は、操作対象のリソースのインスタンスになります。
したがって、この機能を拡張する方法は次のようになります (テストされていないコードなので、おそらく調整なしでは機能しません)。
var myModule = angular.module('myModule', ['ngResource']);
myModule.factory('Book', function($resource) {
var service = $resource('/authors/:authorId/books'),
origQuery = service.prototype.$query;
service.prototype.$query = function (a1, a2, a3) {
var returnData = origQuery.call(this, a1, a2, a3);
returnData.myCustomMethod = function () {
// Create your custom method here...
return returnData;
}
}
return service;
});
繰り返しますが、少しいじる必要がありますが、それが基本的な考え方です。