2013-02-25 11 views
7

È possibile specificare il percorso di un'azione personalizzata $ risorsa?

vorrei scrivere qualcosa di simile:

angular.module('MyServices', [ 'ngResource' ]).factory('User', [ '$resource', ($resource)-> 
    $resource('/users', {}, { 
    names: { path: '/names', method: 'GET', isArray: true } 
    }) 
]) 

Così posso usarlo come:

User.names() # GET /users/names 
+1

La risposta accettata è obsoleta da tempo; non solo la funzione di cui parla è integrata, ma ci sono [alternative più dirette] (http://stackoverflow.com/a/20022017/1709587). –

risposta

8

Non è supportato direttamente nella versione corrente di AngularJS ma c'è un pull request aperta quindi c'è la possibilità che sarà supportato nel prossimo futuro.

Fino ad allora hai 3 opzioni:

1) Gioca con le variabili nel percorso:

$resource('/users/:names', {}, { 
    names: { params: {names: 'names'}, method: 'GET', isArray: true } 
    }) 

2) utilizzare il $http service invece

3) Prova il codice dal menzionato PR nella versione patch-patch di AngularJS

+3

Ora c'è una proprietà 'url' in Angular 1.2 - vedi: http://stackoverflow.com/a/20022017/2583484 – Adam

5

Controllare i registri in questo working Plunker (estratto):

var app = angular.module('plunker', ['ngResource']) 
    .controller('MyController', 
    function($scope, $resource) { 
     var User = $resource(
     '/users/:action', 
     {}, 
     { 
      names:{ 
      method:'GET', 
      params:{action:'names'} 
      } 
     } 
    ); 

     $scope.users = User.get(); 
     $scope.names = User.names(); 
    } 
); 
+0

Grazie. Questo ha funzionato alla grande per il mio progetto. –

5

A meno eloquente, ma ugualmente efficace metodo:

var resourceUrl = '/users'; 
return $resource(resourceUrl, {}, { 
    names: { path: resourceUrl + '/names', method: 'GET', isArray: true } 
}) 
5

Da documentazione angolare: https://docs.angularjs.org/api/ngResource/service/ $ risorsa è possibile specificare 'url' per l'azione personalizzata che sovrascriverà quella precedente.

angular.module('MyServices', ['ngResource']).factory('User', ['$resource', ($resource)-> $resource('/users', {}, { 
names: { url: '/users/names', method: 'GET', isArray: true } 
})]) 

Funziona nel mio progetto utilizzando angolare 1.3.10!

+0

Questo è geniale. Grazie! – whiterook6

Problemi correlati