一维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将提供属性为0
和1
的资源。
您的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
希望这可以帮助别人…