如何通过返回AngularJS中资源的查询方法来获取数组?

时间:2014-08-09 20:27:51

标签: angularjs angular-resource

我已阅读angularjs教程,现在我正在尝试在symfony应用程序中使用。 我已经实现了一个rest客户端资源。响应json对象具有sportEvents属性,该属性是一个数组。这是取得的。

var sportServices = angular.module('sportServices', ['ngResource']);

sportServices.factory('sportClient', ['$resource',
  function($resource){
    return $resource('rest/sport/events.json', {}, {
      query: {
          method:'GET', 
          transformResponse: function (data) {return angular.fromJson(data).sportEvents},
          isArray: true // The sportEvents property is an array.
      }
    });
  }]);

我的控制员:

var sportControllers = angular.module('sportControllers', []);

sportControllers.controller('SportEventListCtrl', ['$scope', 'sportClient',
    function($scope, sportClient) {
      $scope.sportEvents = sportClient.query();
}]);

sportClient.query();这不是一个数组,我不能迭代它。那是我的问题我怎样才能实现sportClient.query()返回一个数组?因为我必须对元素进行分组,为此我需要迭代元素。

所以样本回复:

{"sportEvents": [{id: 2234, number: 43545, name:"random"}, {id: 2235, number: 43546, name:"random"}]}

但这是有趣的部分: 控制器中的console.log( BetClient.query() );命令在控制台中提供以下结果:

[$promise: Object, $resolved: false]

是的,在这个对象中我看到了条目,但我想以某种方式将它转换为数组:)

2 个答案:

答案 0 :(得分:3)

您的代码没有任何“重大”错误,但如果您收到$promise,请先解决,而不是直接将其分配给$scope.sportEvents

使用异步调用,如$http,您将收到一个肯定的承诺,将返回一些内容。操作完成后,您既可以解析数据承诺,也可以在出现错误时拒绝它。

所以这项服务

app.factory('JsonResource', function($resource) {
  return $resource('events.json', {}, {
    query: {
      method: 'GET',
      transformResponse: function(data) {
        return angular.fromJson(data).events;
      },
      isArray: true
    }
  });
});

使用

app.controller('MyCtrl', function($scope, JsonResource) {
  // No direct assignment here, resolve first, then assign
  JsonResource.query().$promise.then(function(data) {
    $scope.events = data;
  });
});

使用JSON格式可以正常使用。

{
  "id": 1,
  "events": [{
    "id": 2234, 
    "number": 43545, 
    "name": "random"
  },{
    "id": 2235, 
    "number": 43546, 
    "name": "random"
  }]
}

请在此处查看相关的Plunker http://plnkr.co/edit/Geklnp

答案 1 :(得分:-1)

在最糟糕的情况下,您可以使用javascript

进行转换
transformResponse: function (data) {

var arrayData = [];
   for( var i in data) {
        if (data.hasOwnProperty(i)){
            arrayData .push(data[i]);
        }
    }
},