2013-02-25 6 views
7

Ist es möglich, den Pfad einer benutzerdefinierten $ Ressourcenaktion anzugeben?

Ich möchte etwas schreiben wie:

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

So kann ich es gerne verwenden:

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

Die akzeptierte Antwort ist lang - veraltet; Es ist nicht nur die Funktion, über die es spricht, sondern auch [einfachere Alternativen] (http://stackoverflow.com/a/20022017/1709587). –

Antwort

8

Es ist nicht direkt in der aktuellen Version von AngularJS unterstützt, aber es gibt eine pull request offen Es besteht also die Chance, dass es in naher Zukunft unterstützt wird.

Bis dahin haben Sie 3 Möglichkeiten bekommen:

1) mit Variablen im Pfad Spielen:

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

2) Verwenden Sie die $http service statt

3) von dem den Code Versuchen erwähnt PR auf der Affe-Patched-Version von AngularJS

+3

Nun gibt es eine 'URL'-Eigenschaft in Angular 1.2 - siehe: http://StackOverflow.com/a/20022017/2583484 – Adam

5

Überprüfen Sie die Protokolle in diesem working Plunker (Auszug):

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

Vielen Dank. Das hat super für mein Projekt funktioniert. –

5

Eine weniger eloquent, aber ebenso wirksame Methode:

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