一维string数组被angular度资源parsing为2d

以下来自服务器的JSON响应

[ "hello", "world" ] 

正在被这个ngResource服务parsing成一个二维数组

 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模块遍历响应中收到的每个项目,并创build一个资源的新实例。 为此,Angular在收到的项目和Resource类之间进行深层拷贝,这给了我们一个带有特殊方法的对象( $save$delete等等)

在这里检查来源 。

内部angular使用angular.copy来执行深层复制,而且这个函数只能用对象数组来操作 ,当我们传递一个string的时候,它会像对象一样对待它。

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

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

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


您的select是:

使用较低级别的$ http服务

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

返回json响应中的对象数组

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

拦截响应并更改您的数据

如果您不能修改服务器发回的数据,并且想要使用ngResource ,则需要转换响应。 阅读如何在这里做

我也一直在努力。 这是我的解决scheme,通过使用查询轻松调整服务

 var app = angular.module('testApp', ['ngResource']); app.factory('Name', function($resource, $sce) { var path = "test.json"; return $resource(path, {}, { query: { method: 'GET', isArray: false } }) }); app.controller('testController', function($scope, Name) { $scope.result; $scope.getResult = function() { Name.query(function(data) { $scope.result = data; }); }; $scope.getResult(); }); 

HTML:

 <!DOCTYPE html> <html ng-app="testApp"> <head> <link href="style.css" rel="stylesheet" /> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular-resource.min.js"></script> <script src="script.js"></script> </head> <body ng-controller="testController"> <h1>{{result.surname}}</h1> </body> </html> 

和JSON文件:

 { "name": "Homer", "surname": "Simpson", "Town": "Springfield" } 

如果感兴趣也可以在Plunker工作: http ://plnkr.co/edit/SwqlZyqZ4zfcpaLxaf39

希望这可以帮助别人…