来自服务器的以下JSON响应
[ "hello", "world" ]
被此ngResource服务解析为2d数组
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 模块遍历响应中收到的每个项目,并创建一个新的Resource实例。为此,Angular在收到的项目和Resource类之间执行了深层复制,这为我们提供了具有特殊方法的对象($save,$delete依此类推)
isArray
true
Resource
$save
$delete
在此处检查源。
在内部使用 angular.copy 进行深度复制,此功能仅对 对象 和 数组 起作用,当我们传递字符串时,它将像对待对象一样对待它。
通过提供对每个字符的顺序访问,JS中的字符串可以表现为数组。angular.copy传递字符串时将产生以下内容
angular.copy
angular.copy('hi',{}) => {0:'h', 1:'i'}
每个字符都将成为对象中的一个值,并将其索引设置为键。 ngResource 将提供具有属性0和的资源1。
0
1
您的选择是:
$http.get('/res').success(function(data){ $scope.test = data; });
[{'data': "hello"}, {'data': "world"}]
如果您无法修改服务器发回的数据并想使用 ngResource ,则需要转换响应。在这里阅读操作方法