$ resource é um serviço útil que o ajuda a interagir com uma API REST de seu aplicativo AngularJS.
$ resource por padrão lida com essas cinco operações REST para (1) obter uma lista de itens, (2) obter um item, (3) inserir um item, (4) atualizar um item e (5) excluir um item:
(1) GET /collection
(2) GET /collection/:id
(3) POST /collection
(4) PUT /collection/:id
(5) DELETE /collection/:id
No entanto, isso pode não ser suficiente para você. O Rails permite que você defina ações adicionais em seus recursos , mas como conectá-los a $ resource?
Acontece que a solução é bem simples:
angular.module('myApp')
.factory('Station', ['$resource', 'apiUrl', ($resource, apiUrl) ->
Station = $resource(apiUrl + '/stations/:collectionRoute:id/:memberRoute', {
id: '@id'
collectionRoute: '@collectionRoute'
memberRoute: '@memberRoute'
}, {
# Define methods on the Station object
# /stations/autocomplete?term=Pra
# Invoke as: Station.autocomplete({term: 'Pra'})
autocomplete: {method: 'GET', isArray: true, params: {collectionRoute: 'autocomplete'}}
# /stations/123/location
# Invoke as: Station.location({id: 123})
location: {method: 'GET', params: {memberRoute: 'location'}}
})
return Station
])
$ recursos vincula automaticamente id
, collectionRoute
e memberRoute
parâmetros para o URL, e todos os outros parâmetros como parâmetros de consulta ( ).?param=
Conectando os parâmetros collectionRoute / memberRoute a métodos personalizados, agora você pode chamar como uma ação de coleção e como uma ação de membro.Station.autocomplete({term: 'Pra'})
Station.location({id: 123})
PS Kudos para http://www.bennadel.com/blog/2433-Using-RESTful-Controllers-In-An-AngularJS-Resource.htm , que foi a fonte original para esta dica.