2015-04-10 3 views
0

Я использую $ ресурс в Угловом и создал ресурс, как это:

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

В какой форме вы передаете данные на запрос с сервера? – IvanMalenko

+0

Посмотрите это http://stackoverflow.com/questions/20020087/how-to-fix-expected-response-to-contain-an-array-but-got-an-object-angular-js – Reena

ответ

1

Когда вы вызываете его в первый раз, вы не проходящие в id параметре, так что вы в конечном итоге на самом деле вызов URL /api/admin/, который, по-видимому возвращает массив.

Второй звонок в DetailCtrl передает идентификатор, поэтому он вызывает другой URL-адрес, например /api/admin/12, и эта служба возвращает один объект, поэтому вы получаете описанную вами ошибку.

Вам нужны разные $ ресурсы для разных ожидаемых возвращаемых значений - один и тот же вызов не сможет вернуть как массив, так и отдельный объект.

В моем собственном коде, я бы разбить его на что-то вроде:

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

+0

спасибо за это - i «В принципе, идиот, я должен позвонить в Appointment.get - not Appointment.query для одного объекта – Mobaz