我在 Angular 中使用 $resource,并设置了如下资源:
angular.module('MyApp')
.factory('Appointment', function($resource){
return $resource('/api/admin/:id', { id: "@_id" }, {
query: {method:'GET', isArray:true}
});
})
现在,当我在一个 Controller (adminController)中使用此资源时,它可以正常工作:
angular.module('MyApp')
.controller('adminController', ['$scope', 'Appointment', '$state', '$rootScope' , '$stateParams', '$log', '$modal','uiGmapGoogleMapApi', function($scope, Appointment, $state, $rootScope, $stateParams, $log, $modal, uiGmapGoogleMapApi) {
$scope.apps = Appointment.query();
}])
但是当我尝试在另一个(DetailCtrl)中使用它时,我收到上述错误:
angular.module('MyApp')
.controller('DetailCtrl', ['$scope', 'Appointment', '$state', '$rootScope' , '$stateParams', '$log', '$modal', 'uiGmapGoogleMapApi', function($scope, Appointment, $state, $rootScope, $stateParams, $log, $modal, uiGmapGoogleMapApi) {
$scope.detail = Appointment.query({id: $stateParams.id})
}])
谁能解释一下这是怎么回事?我收到此错误:
Error: [$resource:badcfg] Error in resource configuration for action `query`. Expected response to contain an array but got an object
最佳答案
当您第一次调用它时,您没有传入 id
参数,因此您最终实际上调用了 URL /api/admin/
,该 URL显然返回一个数组。
DetailCtrl
中的第二个调用正在传递一个 ID,因此它正在调用不同的 URL,例如 /api/admin/12
,并且该服务返回一个对象,因此您会收到您所描述的错误。
对于不同的预期返回值,您需要不同的 $resources - 相同的调用将无法同时返回数组和单个对象。
在我自己的代码中,我会将其拆分为:
angular.module('MyApp')
.factory('Appointment', function ($resource) {
return {
list: $resource('/api/admin', {}, {
query: { method: 'GET', isArray: true }
})
single: $resource('/api/admin/:id', {}, {
query: { method: 'GET', isArray: false }
})
};
});
你可以使用
获取列表$scope.apps = Appointment.list.query();
和一次约会
$scope.detail = Appointment.single.query({id: $stateParams.id});
关于javascript - Angular $resource - 预期响应包含一个数组,但得到一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29568405/