Angularjs $资源查询方法工作但是方法不起作用

时间:2016-12-26 07:21:24

标签: angularjs angular-resource

这是我的工厂方法:



.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)});
}])




这是错误消息:

  

操作object的资源配置出错。预期的响应包含一个数组但得到了一个GET(请求:data / letters.json {4})

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

[

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

由于

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

$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方法。

<强>更新

  

您如何认为我可以在这种情况下使用查询方法从数组数据中获取特定对象?

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

$scope.array = lettersFactory.query();

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

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

资源实例和集合具有其他属性:

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

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

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

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