我可以通过两种方式通过 ID 获取 REST 资源:
GET /users/1
GET /users/1,2
第一个返回单个对象,如 {id:1,name:"John"}
而第二个返回一个数组,如 [{id:1,name:"John"} ,{id:2,name:"Jill"}]
.
请不要争论这是否是合法的 REST;接受服务有这个,我需要使用它。
angular 的 $resource 实际上从请求端智能地处理它:
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);
};
}]).
最佳答案
通常的约定是为单个对象创建一个 Resource.get()
方法,为它们的数组创建一个 Resource.query()
方法。
关于angularjs - Angular $resource.get 可以为 GET 处理数组和非数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071105/