Angular $ resource - 包含数组但得到一个对象的预期响应

时间:2015-04-10 18:30:40

标签: javascript angularjs angular-resource

我在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

1 个答案:

答案 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});