资源需要一个数组,但它获得一个内部有数组的对象。 Angularjs +资源

时间:2014-06-03 18:13:11

标签: arrays json angularjs

我是Angularjs的新人并且有所怀疑。我正在使用$ resource以这种方式使用Rest Web Service:

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返回有什么问题吗?有没有更好的方法来做这一切?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的退货或代码没有错。我怀疑服务中的$id值对于实际的提供者内容数组是否有用,所以我建议给数组提供自己的范围变量,以便从模板访问它更清晰。如果你必须做清理或其他任何事情,你也可以在回调中做到这一点。

<强> foo.js

providersApp.controller('ProvidersController',
    function ProvidersController($scope, providersSrvc) {
        $scope.providers = providersSrvc.getData().query().then(function(data) {
            return data.$values.filter(function (provider) {
                return (provider.Category === null);
            }
        }
    });

<强> foo.html

<ul>
  <li ng-repeat="provider in providers">
    {{provider.Name}}
    {{provider.Diagnose}}
    {{provider.Category}}
    {{provider.Address}}
    {{provider.Services}}
  </li>
</ul>

作为PS:"provider"是Angular中的一个概念,因此可能想要考虑将您的域语重命名为“Hospitals”或“CareProvider”,以避免混淆:)