【发布时间】:2014-06-03 18:13:11
【问题描述】:
我是 Angularjs 的新手,有一个疑问。我正在使用 $resource 以这种方式使用 Rest Web 服务:
providersApp.factory('providersSrvc', function ($resource) {
return {
getData: function () {
return $resource('http://devfz.azurewebsites.net/api/providers', {}, {
query: { method: 'GET' }
});
}
}
});
这是我的控制器:
providersApp.controller('ProvidersController',
function ProvidersController($scope, providersSrvc) {
$scope.providers = providersSrvc.getData().query();
});
这个 Rest URL 正在返回一个 JSON 对象,其中包含一个数组(如果我错了,请纠正我):
{"$id":"1","$values":[{"$id":"2","Id":1,"Name":"Diagnose","Category":null,"Address":null,"Services":null},{"$id":"3","Id":2,"Name":"Hospital São lucas","Category":null,"Address":null,"Services":null},{"$id":"4","Id":3,"Name":"Hospital Primavera","Category":null,"Address":null,"Services":null}]}
我找到了一种像这样迭代它的方法:
provider in providers.$values
我的问题是:这被认为是迭代它的好方法吗?我在互联网上找到的所有示例似乎都返回 JSON 数组,而不是像我这样的 JSON 对象内的数组。我的 Restful JSON 返回有什么问题吗?有没有更好的方法来完成这一切?
非常感谢您的帮助!
【问题讨论】:
-
你想要
'query': {method:'GET', isArray:true},。 -
查看Angular phonecat tutorial 的示例。 docs for $resource 也提到了
isArray,但不多。 -
如果我使用“isArray:true”,我得到一个错误,说它需要一个数组,但得到一个对象。这个对象里面有一个数组。
-
哦,我明白了。抱歉,我没有对您链接的 api 给予足够的关注。服务是其 API 由编写服务的开发人员定义的对象,并且该服务定义了一个带有
$id和$values字段的对象......因此无法直接从中获取数组。你所拥有的解析很好,但我建议(如果你打算在控制器/模板中使用 $values 作为数组)将它分配给回调中的 $scope 变量。 -
非常感谢,克伦尼。我明白你的意思:)