有兩種方法,我可以通過ID得到休息資源:
GET /users/1
GET /users/1,2
第一返回單個對象像{id:1,name:"John"}
,而第二返回類似[{id:1,name:"John"},{id:2,name:"Jill"}]
陣列。
請不要爭論這是否是合法的REST;只是接受一個服務有這個,我需要與它合作。
角的$資源實際上是智能處理它從要求方:
User.get({users:['1','2']})
轉變成
GET /users/1,2
但它並不處理響應良好。它期望一個單一的對象。如果我將定義更改爲isArray:true
,那麼它在單個請求上失敗GET /users/1
如何獲得它以智能地處理兩者?
編輯:我做了一些奇怪的黑客得到它的工作,但希望有一個本地方法:
factory('Resource',['$resource','_',function ($resource,_) {
return function(url,params,methods){
var defaults = {
getSingle: {method: 'get', isArray:false},
getMultiple: {method: 'get', isArray:true}
}, resource = $resource(url,params,angular.extend(defaults,methods)), urlParams = {};
_.each(url.split(/\W/), function(param){
if (param && (new RegExp("(^|[^\\\\]):" + param + "\\W").test(url))) {
urlParams[param] = true;
}
});
// do not override if they did
if (!(methods||{}).get) {
resource.get = function (params,success,error) {
// look for multiples
var isMultiple = false;
_.each(params,function (val,key) {
if (key && urlParams[key] && angular.isArray(val)) {
isMultiple = true;
return(false);
}
});
return this[isMultiple?"getMultiple":"getSingle"](params,success,error);
};
}
return(resource);
};
}]).
那麼,查詢是由不同的參數一般查詢。這絕對是一個'get',但對於多個...甚至$ resource都知道在* request *端要做什麼,因爲它會將它轉換爲逗號分隔列表。你說我需要'Resource.getMultiple()'或類似的東西? – deitch
是的,我會嘗試。 –