2016-04-28 6 views
3

Wie kann ich die URL (und Parameter) von einer ng-Ressource bekommen?Wie kann ich die URL von einer ng-Ressource bekommen?

Und wenn das nicht möglich ist, wie kann ich einen Wrapper erstellen oder ng-Ressource erweitern, damit ich diese Funktionalität bekomme?

Update: Ich möchte in der Lage sein, die URL und Parameter aus dem Ressourcenobjekt zu extrahieren, ohne jemals eine Anfrage zu senden.

In einer idealen Welt die folgenden Werke:

myResource = $resource('localhost/foo/bar'); 

myResource.getUrl() // returns localhost/foo/bar 

Da die getUrl Funktion existiert nicht ich folgendes versucht, fand ich in https://stackoverflow.com/a/28474289/4829972

einer Verpackungsfabrik:

angular.module('app').factory('ExtendedResourceFactory',['$resource', 
    function($resource) { 
    function ExtendedResourceFactory() { 
     var Resource = $resource.apply(this, arguments); 

     Resource.prototype.getArguments = function() { 
     return arguments 
     }; 

     return Resource; 
    } 

    return ExtendedResourceFactory; 
    } 
]); 

Ich spritze die neue Fabrik ein und probiere es aus:

res = ExtendedResourceFactory('url') 
res.getArguments() 

Uncaught TypeError: res.getArguments is not a function(…) 

Dankbar für Anweisungen oder Lösungen !!

+0

Ich brauche das auch für Unit-Tests. Ich würde gerne tun: '$ httpBackend.expectGET (MyResource.getUrl()). Antwort (200, fixture.get)' – Ludo

Antwort

0

Vielleicht wird das Folgende von Nutzen sein. Da Sie die URL, die an $ resource übergeben wird, explizit kontrollieren können, gehe ich davon aus, dass Sie die Antwort so transformieren können, dass sie die gewünschte Funktion bereitstellt. Es ist keineswegs sauber, sondern wirkt funktional.

var resource; 

resource = $resource('/foo/bar', 
    { 
    id: 1 
    }, { 
    get: { 
     method: 'GET', 
     transformResponse: function(data) { 
     data = angular.fromJson(data); 
     data.getUrl = function() { 
      return '/foo/bar'; 
     }; 
     return data; 
     } 
    } 
    } 
); 
+0

Vielen Dank! Mit dieser Lösung müsste ich die get-Methode aufrufen, damit die getUrl-Funktion verfügbar gemacht wird. Die Frage war wahrscheinlich nicht klar genug. Was ich erreichen möchte, ist eine Möglichkeit, die URLs und Parameter aus dem Ressourcenelement zu extrahieren, ohne jemals den Endpunkt zu treffen. – alfthan

0

Es sieht aus wie NgResource speichert alle internen Variablen und URLs innerhalb der eigenen Rahmen, so dass es unmöglich ist, sie von außen zu öffnen.

Was Sie tun könnten, ist Ihre $resource mit zusätzlichen Informationen, die Sie bereitstellen. Mit dieser Methode können Sie Ihre URL (oder eine beliebige Eigenschaft) neben Ihrer Ressource haben.

myResource = angular.extend(
    $resource('localhost/foo/bar'), 
    { 
     getUrl: function() { return 'localhost/foo/bar'; } 
    } 
); 
myResource.getUrl() // returns localhost/foo/bar 
Verwandte Themen