2017-07-28 4 views
5

Ich versuche, den neuen http-Client zu verwenden, der mit Angular 4.3 kam. Ich habe die Dokumente und die Verwendung der HttpParams Klasse überprüft, aber es scheint nicht zu funktionieren oder ich mache etwas falsch. Hier ist, was ich habe:Http Parameter in Angular 4.3

delete(personId: string) { 
    const params = new HttpParams(); 
    params.set('personId', personId); 
    return this.http.delete(`${this.baseUrl}`, { 
     params 
    }); 
    } 

Aber wenn die antrag gibt es keine Abfrage params in meiner url Jede Hilfe würde geschätzt

Antwort

9

Die params jetzt unveränderlich sind so müssen Sie sie setzen, wenn Sie initiiere die neuen HttpParams, so dass jedes set() eine neue Instanz zurückgibt und die Änderungen anwendet. Versuchen

const params = new HttpParams() 
    .set('personId', personId); 

Hier sind die Dokumente, die Kopf- und URL-Parameter decken 4,3 - https://angular.io/guide/http#headers


Edit: Ich wollte meine Antwort und Zustand aktualisieren, die Sie nicht unbedingt setzen die Parameter, wenn Sie die HttpParams-Klasse initiieren. Zum Beispiel benötigen, wenn Sie Parameter innerhalb einer for-Schleife oder außerhalb der HttpParams Initialisierung festlegen können Sie dies tun, indem

const params = new HttpParams() 
    .set('personId', personId); 

params = params.set('personName', personName); 

Wie durch die docs angegeben:

Die httpheaders Klasse ist unveränderlich, so dass jeder set() gibt eine neue Instanz zurück und wendet die Änderungen an.

+0

Ja, ich sehe das jetzt, Danke! – ocespedes

1

HttpParams is immutable.

set() erstellt und gibt eine neue HttpParams Instanz, ohne die Instanz mutiert, auf dem set() genannt wird.

So sollte der Code

const params = new HttpParams().set('personId', personId); 

Hier ist eine weitere Sache, die ich mit bei der Verwendung dieses neuen HttpParams gekämpft, manchmal haben wir eine Anzahl von n params, an, dass es nützlich Zeit zu totzuschlagen ist eine Funktion haben, die das Parameter-Objekt (das wir vor Angular 4.3 benutzt haben) in die HttpParams konvertiert.

Ich schlage vor, toHttpParams Funktion in Ihrem häufig verwendeten Service zu machen. Sie können also die Funktion aufrufen, um das Objekt in HttpParams zu konvertieren.

/** 
* Convert Object to HttpParams 
* @param {Object} obj 
* @returns {HttpParams} 
*/ 
toHttpParams(obj: Object): HttpParams { 
    return Object.getOwnPropertyNames(obj) 
     .reduce((p, key) => p.set(key, obj[key]), new HttpParams()); 
} 

Update:

Seit 5.0.0-beta.6 (2017.09.03) sie neue Funktion (accept object map for HttpClient headers & params)

In Zukunft das Objekt hinzugefügt werden kann, übergeben direkt anstelle von HttpParams.

Dies ist der andere Grund, wenn Sie eine gemeinsame Funktion wie toHttpParams verwendet haben oben erwähnt, können Sie es leicht entfernen oder Änderungen tun, falls erforderlich.