2016-04-19 9 views
0

Ich habe ein seltsames Problem, das mit URLSearchParams() erscheint es nur funktioniert, wenn var search definiert (das heißt, wenn ich die Variablennamen zu ändern var otherName) es nicht funktioniert !!Weird-Ausgabe mit URLSearchParams() in Angular2

Jedoch funktioniert es aus irgendeinem Grund nur, wenn der Name search ist !! was überhaupt nicht logisch ist.

Irgendeine Idee, was hier passiert?

constructor(http) { 
    this.http = http; 
    this.genre = null; 
    this.dishes = null; 

    //this one works fine 
    var search = new URLSearchParams(); 
    search.set('order', '-ordersNo'); 

    //Here is the issue (to make it work, I need to remove the previous search declaration, and rename the below var limit to search) 
    var limit = new URLSearchParams(); 
    limit.set('limit', '2'); 

    this.http.get('https://example.com/classes/Mn', { limit }).subscribe(data => { 
    this.dishes = data.json().results; 
    }); 


    this.http.get('https://example.com/classes/Genre',{ search }).subscribe(data => { 
    this.genre = data.json().results; 
    }); 

Antwort

1

Ich denke, man tatsächlich es so haben wollen:

{ search: search } 

//and 

{ search: limit } 

options Parameter von HTTP-GET-Methode muss folgende Signatur haben:

export interface RequestOptionsArgs { 
    url?: string; 
    method?: string | RequestMethod; 
    search?: string | URLSearchParams; 
    headers?: Headers; 
    body?: string; 
} 

aber {limit } tatsächlich ist die gleiche als { limit: limit }.

+0

Können Sie bitte mehr ausarbeiten? –

+0

Was Sie vorschlagen, funktioniert, aber ich verstehe immer noch nicht, warum, wenn ich die Suche auf einen anderen Namen ändere, hört es auf zu arbeiten! sehr seltsam!! –

1

In der Tat ist es eine Abkürzung von JavaScript: { search } entspricht { search: search } und { limit } zu { limit: limit }.

Es funktioniert gut für den ersten Fall, da Angular2 eine search-Eigenschaft erwartet, um Abfrageparameter zu definieren. Wenn Sie die Variable limit verwenden möchten, können Sie diese Verknüpfung nicht verwenden und Sie müssen Folgendes verwenden: { search: limit }.

+0

{Suche: Limit} funktioniert sicherlich! Aber sehen wir uns das andere Szenario an, das die 'var search' entfernt und nur 'var limit' übrig lässt, wenn limit danach aufgerufen wird, es funktioniert nicht! Ist die Suche reserviert oder was? –

+0

Die Struktur des Objekts, das an Angular2 übergeben werden soll, wird in der 'RequestOptionsArgs'-Schnittstelle als @kemsky angegeben ...' limit' ist keine unterstützte Eigenschaft von Angular2 ... –