gpt4 book ai didi

json - Angular 资源将一维字符串数组解析为 2d

转载 作者:IT老高 更新时间:2023-10-28 12:44:10 24 4
gpt4 key购买 nike

来自服务器的以下 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; ngResource 期望在您的响应中包含一个对象或 对象 数组。


isArray 在操作列表中设置为 true 时,ngResource 模块会遍历响应中收到的每个项目并创建资源的新实例。为此,Angular 在接收到的项目和 Resource 类之间执行深度复制,这为我们提供了一个具有特殊方法($save$delete等)

查看source here .

内部 Angular 使用 angular.copy 来执行深拷贝,这个函数只对objectsarrays进行操作,当我们传递一个字符串时,它会把它当作一个对象来对待。

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

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

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


您的选择是:

使用较低级别的$http服务

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

在您的 json 响应中返回一个对象数组

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

拦截响应并更改您的数据

如果您无法修改服务器发回的数据并想使用 ngResource,则需要转换响应。阅读如何做 here

关于json - Angular 资源将一维字符串数组解析为 2d,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13813673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com