Angularjs $resource 查询方法有效但获取方法无效

Angularjs $resource query method working but get method not working

这是我的工厂方法:

.factory('lettersFactory', ['$resource', function ($resource) {
 var url = "";
    if(ionic.Platform.isAndroid()){
        url = "/android_asset/www/";
    }
    return $resource(url + 'data/letters.json');
}])

这是控制器:

.controller('LettersCtrl', ['$scope','lettersFactory', '$stateParams', '$state', '$ionicPopover', function($scope, lettersFactory, $stateParams, $state, $ionicPopover) {
    
      $scope.letters = lettersFactory.query();
      $scope.letter = lettersFactory.get({number:parseInt($stateParams.letterId, 10)});
}])

这是错误消息:

Error in resource configuration for action object. Expected response to contain an array but got an GET (Request: data/letters.json {4})

而我的 letter.json 是这样的数组:

[

{"number":1,
    "title": "title",
    "content": "content"},
{"number":1,
    "title": "title",
    "content": "content"}
]

谢谢

如果响应不应该是数组,那么您需要在查询中将 isArray 设置为 false 属性。

'query': {method: 'GET', isArray: false }

参考文档。https://docs.angularjs.org/api/ngResource/service/$resource

或者您可以从控制器传递 json 作为数组。

$resource 设置的默认方法包含这些操作1:

{ 'get':    {method:'GET'},
  'save':   {method:'POST'},
  'query':  {method:'GET', isArray:true},
  'remove': {method:'DELETE'},
  'delete': {method:'DELETE'} };

在你的例子中,get 方法失败了,因为来自 XHR 的数据是一个数组,而该方法需要一个对象。

query 方法成功,因为来自 XHR 的数据是一个数组,而该方法需要一个数组。

对对象数据使用get方法;对数组数据使用 query 方法。


更新

how do you think I can use the query method in this situation to get a particular object from the array data?

一种方法是使用返回资源对象的$promise 属性:

$scope.array = lettersFactory.query();

$scope.array.$promise.then(function(resourceArray) {
     $scope.item = resourceArray[0];
});

重要的是要意识到立即调用 $resource 对象方法 returns 一个空引用(对象或数组取决于 isArray)。一旦数据从服务器返回,现有引用就会填充实际数据。

资源实例和集合有额外的属性:

  • $promise: 创建此实例或集合的原始服务器交互的 promise

    成功时,使用相同的资源实例或集合对象解析承诺,并使用来自服务器的数据进行更新。

    失败时,使用 http 响应对象拒绝承诺,没有资源 属性。

有关详细信息,请参阅 AngularJS $resource API Reference