2015-02-13 5 views
8

я учусь услугами угловых в $ ресурсов и в angular tutorial добавляется пользовательское действие (запрос), который имеет свой метод набора для «получить» и IsArray устанавливается истинной

return $resource('phones/:phoneId.json', {}, { 
     query: {method:'GET', params:{phoneId:'phones'}, isArray:true} 
}); 

Однако, если посмотреть на the docs for $resource «запрос» действие уже имеет метод набор для «получить» и IsArray уже установлена ​​истина по умолчанию . Поэтому я подумал, что могу просто оставить эти свойства.

Это работает для метода собственности, но получается, что если я оставить из IsArray свойства я получаю эту ошибку:

Error: [$resource:badcfg] Error in resource configuration for action query . Expected response to contain an object but got an array

Почему это?

+0

ли вы удалить запрос от $ ресурса? 'return $ resource ('phones /: phoneId.json');' –

+0

no, я просто удалил свойство метода, и я хочу удалить свойство isArray, но это не работает – kevinius

+0

Но почему вы создаете/заменяете пользовательский запрос как есть уже один встроенный? Используйте код, который я разместил, и запрос будет работать. –

ответ

16

Я думаю, вы неправильно поняли документацию.

По умолчанию без добавления каких-либо дополнительных действий, следующие поддерживаются:

'get': {method:'GET'}, 
'save': {method:'POST'}, 
'query': {method:'GET', isArray:true}, 
'remove': {method:'DELETE'}, 
'delete': {method:'DELETE'} 

Так по умолчанию query действие ожидает, что массив должен быть возвращен, который имеет смысл, так как запрос обычно будет возвращать массив элементов.

Так что, если вы используете:

phonecatServices.factory('Phone', ['$resource', function($resource){ 
    return $resource('phones/phones.json'); 
}]); 

Вы можете выполнить запрос, например, так:

var queryParams = { name: 'test' }; 

Phone.query(queryParams, {}, function (response) { 
    $scope.phones = response; 
}); 

Теперь, если вы хотите добавить пользовательское действие, то по умолчанию для isArray является false так:

return $resource('phones/:phoneId.json', {}, { 
     someCustomAction: {method:'GET', params:{phoneId:'phones'} } 
}); 

необходимо вернуть объект. Если массив был возвращен, то isArray необходимо будет установить в true следующим образом:

return $resource('phones/:phoneId.json', {}, { 
     someCustomAction: {method:'GET', params:{phoneId:'phones'}, isArray: true } 
}); 
+3

Чтобы быть справедливым, ДЕЙСТВИТЕЛЬНО НЕПРАВИЛЬНО неправильно понимать документацию Angular. :) – MaxRocket

Смежные вопросы