的建議從ricick是一個很好的,但如果你想真正有一個返回數組的一個方法,你將有一個更難的時間這樣做。基本上你需要做的是創建一個$資源及其實例的包裝。您碰到的問題是來自angular-resource.js的以下代碼行:
var value = this instanceof Resource ? this : (action.isArray ? [] : new Resource(data));
這是設置$ resource的返回值的位置。在執行ajax請求時,將會填充並返回「value」。當ajax請求完成時,該值返回上面的「value」,但是通過引用(使用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;
});
同樣,你將不得不與它爛攤子位,但這是基本的想法。
看看這有助於[在Angular.js $資源的關係】(http://stackoverflow.com/questions/9981090/resource-relations-in-angular-js)。 – Stewie 2013-03-08 00:27:29