2016-12-26 53 views
0

这里是我的工厂方法:

.factory('lettersFactory', ['$resource', function ($resource) { 
 
\t 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(请求:数据/ letters.json {4})

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

[ 

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

感谢

+0

检查响应是否是一个数组或不.. –

回答

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

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

    失败时,承诺被拒绝,并且没有资源属性的http响应对象。

欲了解更多信息,请参阅AngularJS $resource API Reference

+0

你认为我可以如何使用在这种情况下'query'方法从数组数据中获取特定对象?我改变了'lettersFactory.get({number:parseInt($ stateParams.letterId,10)}); 'to'lettersFactory.query({number:parseInt($ stateParams.letterId,10)});'但它仍然有效。 –

+0

查看答案的更新。 – georgeawg

+0

谢谢@georgeawg。我试过了,它工作。 –

1

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

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

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

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

+0

的letter.json是一个JSON数组,所以我希望能够得到充分的阵列查询()方法,以及使用get()方法的单个对象。我修改了返回值,如下所示:'return $ resource(url +'data/letters.json',{'query':{method:'GET',isArray:false}});'但它仍然给出相同的错误。 –

+0

@Awa验证一次http://stackoverflow.com/questions/24409220/error-in-resource-configuration-expected-response-to-contain-an-object-but-got –