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

标签 javascript angularjs angular-resource

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

相关文章:

javascript - 从 $resource.get Promise 中提取 JSON 对象

angularjs - $resource中的delete和remove方法有什么区别?

javascript - 设置 MUI 切换按钮组的默认值

Javascript Nodejs 值未插入数组

angularjs - 将 ngResource 与 webpack 结合使用

angularjs - 未定义显示错误图表的 Angular chart.js

javascript - $routeProvider 在 AngularJS 中无法正常工作(导致网站崩溃)

javascript - 在javascript中制作一个切换按钮

javascript - ES7 装饰器在设置了 "displayName"的类上不起作用

javascript - 如何使用 GitHub API 获取 GitHub 问题的数量?