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
这是我的工厂方法:
.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