Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在AngularJS中从资源的查询方法返回中获取数组?_Angularjs_Angular Resource - Fatal编程技术网

如何在AngularJS中从资源的查询方法返回中获取数组?

如何在AngularJS中从资源的查询方法返回中获取数组?,angularjs,angular-resource,Angularjs,Angular Resource,我已经阅读了angularjs教程,现在我正在尝试在symfony应用程序中使用。 我已经实现了一个rest客户端资源。响应json对象有一个sportEvents属性,它是一个数组。它被取走了 var sportServices = angular.module('sportServices', ['ngResource']); sportServices.factory('sportClient', ['$resource', function($resource){ retu

我已经阅读了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]

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

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

transformResponse: function (data) {

var arrayData = [];
   for( var i in data) {
        if (data.hasOwnProperty(i)){
            arrayData .push(data[i]);
        }
    }
},
您的代码没有任何“重大”错误,但如果您收到
$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

您能发布服务器端代码返回的JSON示例吗?我已经添加了,但这并不重要,因为sportClient.query();不返回JSON数组:)它返回一个地狱男孩:D angularJS自动将其转换为另一个JSON对象,该对象对于视图是可迭代的,但是。。。您好:D我想在控制器中迭代它,但我不能,这是我最大的问题:DDid plunker帮助您吗?在控制器中:
console.log(BetClient.query())
命令给了我这个对象:
[$promise:object,$resolved:false]
,但我想返回我的数组:DBetClient.query(函数(数据){console.log(数据)})
返回angular.fromJson(数据).events-愚蠢的我,只是假设JS响应会被解码!难怪我没有行可以迭代!