2013-03-01 3 views
13

J'ai plusieurs chemins d'URL que je voudrais mapper vers une seule ressource. Cependant, je ne sais pas comment changer l'URL en fonction de la fonction appelée. Par exemple, le: cartographie dest pour la requête serait/allProducts, cependant détruire serait quelque chose le long des lignes de/supprimer /: idPlusieurs URL de routage pour un seul service AngularJS

service.factory('ProductsRest', ['$resource', function ($resource) { 
    return $resource('service/products/:dest', {}, { 
     query: {method: 'GET', params: {}, isArray: true }, 
     save: {method: 'POST'}, 
     show: { method: 'GET'}, 
     edit: { method: 'GET'}, 
     update: { method: 'PUT'}, 
     destroy: { method: 'DELETE' } 
    }); 
}]); 

Répondre

24

Pour chaque action, vous pouvez substituer l'argument url. Spécialement pour cela est l'argument url: {...}.

Dans votre exemple:

service.factory('ProductsRest', ['$resource', function ($resource) { 
    return $resource('service/products/', {}, { 
     query: {method: 'GET', params: {}, isArray: true }, 
     save: {method: 'POST', url: 'service/products/modifyProduct'}, 
     update: { method: 'PUT', url: 'service/products/modifyProduct'} 
    }); 
}]); 
17

J'ai juste besoin de mettre l'URL dans comme param.

service.factory('ProductsRest', ['$resource', function ($resource) { 
    return $resource('service/products/:dest', {}, { 
     query: {method: 'GET', params: {dest:"allProducts"}, isArray: true }, 
     save: {method: 'POST', params: {dest:"modifyProduct"}}, 
     update: { method: 'POST', params: {dest:"modifyProduct"}}, 
    }); 
}]); 
+0

comment avez-vous appelé chacun de ces? Supposons que vous vouliez simplement appeler la sauvegarde, avez-vous fait ProductsRest.save(); ? – user20358

+1

belle solution, mais préfèrent solution mikemueller, pour certains cas, c'est plus clair et lisible. –

Questions connexes