2014-09-15 19 views
5

Jestem początkujący z angularjs, i nie mogę znaleźć błąd w tym kodzieangularjs zasobów URL

var myCarResource = $resource('cars/:carId', 
     { 
      carId:'@id' 
     }); 
    var car = myCarResource.get({id:'abc'}); 

Oczekiwany URL: .../cars/abc

Wywołana URL: .../cars?id=abc

Używam angularjs v1.2.24

Czy ktoś może mi pomóc? Dzięki

+2

Może być to może pomóc http://stackoverflow.com/questions/16677487/angularjs-resource-builds-wrong-resource-url – Yalamber

Odpowiedz

5

Jak podano w dokumentacji $resourceparamDefaults:

Biorąc szablon/ścieżka /: czasownik i parametr {czasownik: 'witam', pozdrowienie: 'Hello'} powoduje URL/path/greet? salutation = Cześć.

Jeżeli wartość parametru jest poprzedzona @ Następnie wartość dla tego parametru będzie ekstrahowano z odpowiednimi właściwościami obiekcie danych (pod warunkiem, gdy wywołanie sposób działania). Na przykład, jeśli przedmiotem defaultParam wynosi {someParam: „@someProp”}, to wartość someParam będzie data.someProp

Sugeruje to, że każdy czasownik zdefiniowane w adresie URL, który odpowiada parameterizd klucze zdefiniowane w Parametr domyślny $resource lub metody klasy class (get, save, etc ..) będą miały odpowiednią wartość tego klawisza, zastępując czasownik w adresie URL. Znakiem „@” notacja z drugiej strony, nie zostało wyjaśnione właściwie w tym kontekście powinno być:

Jeśli wartość parametru jest poprzedzona @ następnie wartości dla tego parametru zostaną wyodrębnione z odpowiednich właściwość obiektu danych (pod warunkiem wywołania metody działania instancji).

metody działania instancji (get $, $ uratować $ usuwanie, etc ..), to metody, które są wykorzystywane do danych obiektów pobierane za pomocą $resource metod działania klasy. Są one zazwyczaj pomocne podczas łączenia żądań z tymi samymi zasobami.

EXAMPLE DEMO

Załóżmy, że cars/abc zwraca json reakcji:

{ 
    "id": "abc" 
} 

Przeczytaj komentarze pokazujące reakcje każdym wywołaniu metody działania.

var myCarResource = $resource('cars/:carId', 
{ 
    carId:'@id' 
}); 


// This sends a GET request '/cars/?id=abc 
myCarResource.get({id:'abc'}); 

// This sends a GET request '/cars/abc' 
myCarResource.get({carId:'abc'}); // returns {"id": "abc"} 

myCarResource.get({carId:'abc'}).$promise.then(function(car) { 

    // sends a POST request '/cars/abc', it replaces the :carId verb from the 
    // @id notation you have defined in the parameter default. It also sends, 
    // other parameter defaults defined with '@' that are defined as verbs in the url. 
    car.$save(); 

}); 
+0

Od @Yalamber komentarz/link powyżej, innym rozwiązaniem jest wykonanie następujących czynności : 'myCarResource.get ({}, {id: 'abc'}); 'Z mojego ograniczonego rozumowania wierzę, że pierwszy obiekt jest bezpośrednio związany ze wzorcem adresu URL, a zatem musi pasować do nazw: param w adresie URL (w tym sprawa, samochód). Drugi obiekt to ten, który jest używany, gdy używasz "@id" i będzie ciągnąć identyfikator drugiego obiektu i dopasowywać go do: carId –

Powiązane problemy