angularjs - Angular $resource.get 可以为 GET 处理数组和非数组吗?

标签 angularjs

我可以通过两种方式通过 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/

相关文章:

javascript - 将 ng-click 绑定(bind)到选项值

javascript - 将配置文件与angularjs一起使用

javascript - Angular UI路由器条件自动滚动

javascript - ng-bind-html 不适用于输入标签

javascript - 按属性的属性过滤 ngOptions

javascript - 使用 MEAN 堆栈查询关联模型

html - AngularDart ng-在表格中重复?

javascript - angular-ui-router 只加载模板但不加载 Controller

javascript - Angular JS : Error while getting data from typeahead

angularjs - 在 ng-grid 中自动填充 i18n 语言 - AngularJS