我在Angular中使用$资源,并设置了这样的资源:
angular.module('MyApp')
.factory('Appointment', function($resource){
return $resource('/api/admin/:id', { id: "@_id" }, {
query: {method:'GET', isArray:true}
});
})
现在,当我在一个控制器(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
答案 0 :(得分:1)
当您第一次调用它时,您没有传入id
参数,因此您最终实际调用了URL /api/admin/
,这显然会返回一个数组。
DetailCtrl
中的第二个调用是传递一个id,所以它调用了一个不同的URL,比如说/api/admin/12
,这个服务正在返回一个对象,所以你得到了你描述的错误。 / p>
对于不同的预期返回值,您需要不同的$资源 - 同一个调用将无法同时返回数组和单个对象。
在我自己的代码中,我会把它分成如下:
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});