这是我的工厂方法:
.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"}
]
由于
答案 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