一维字符串数组被角度资源解析为二维

2024-04-01

来自服务器的以下 JSON 响应

[
    "hello",
    "world"
]

正在被 ngResource 服务解析为二维数组

myService.factory('Name', function($resource){
    return $resource(site_url+'api/accounts/:accountId/names/', {}, {
        list: {method:'GET', params:{}, isArray:true}
    });
});

像这样称呼

$scope.names = Name.list({accountId:$scope.account.id}, function(e){
    console.log(e);
});

追踪到

[{"0":"h","1":"e","2":"l","3":"l","4":"o"},{"0":"w","1":"o","2":"r","3":"l","4":"d"}]

有什么提示吗?


TLDR; ng资源需要一个对象或数组objects在你的回应中。


When isArray被设定为true在操作列表中,ng资源模块迭代响应中收到的每个项目,并创建资源的新实例。为此,Angular 在收到的项目和Resource类,它为我们提供了一个具有特殊方法的对象($save, $delete等等)

检查来源在这里 https://github.com/angular/angular.js/blob/master/src/ngResource/resource.js#L385-L394.

内角用途角度复制 http://docs.angularjs.org/api/angular.copy执行深层复制,此功能仅适用于objects and arrays,当我们传递一个字符串时,它会将其视为一个对象。

JS 中的字符串可以通过提供对每个字符的顺序访问来充当数组。angular.copy当传递一个字符串时会产生以下结果

angular.copy('hi',{})   => {0:'h', 1:'i'}

每个字符都成为对象中的一个值,其索引设置为键。ng资源将提供具有属性的资源0 and 1.


您的选择是:

使用较低级别$http service

$http.get('/res').success(function(data){
  $scope.test = data;
});

在 json 响应中返回对象数组

[{'data': "hello"}, {'data': "world"}] 

拦截响应并更改您的数据

如果无法修改服务器发回的数据并想使用ng资源您将需要改变响应。阅读如何做here http://docs.angularjs.org/api/ng.%24http

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一维字符串数组被角度资源解析为二维 的相关文章

随机推荐