2017-11-10 4 views
0

Dies ist meine Zahl von Akteuren:Wie ein Array in einer Abfragezeichenfolge in HttpClient übergeben?

['Elvis', 'Jane', 'Frances'] 

Wie in Httpclient dieses Array in einem Query-String zu übergeben?

ich versuchte, zu verwenden:

1)

let params = new HttpParams(); 
params = Params.append('actors[]', ['Elvis', 'Jane', 'Frances']); 
this.http.get(url, { params: Params }); 

2)

let params = new HttpParams().set('actors[]', ['Elvis', 'Jane', 'Frances']); 
this.http.get(url, { params: Params }); 

3)

let Params = new HttpParams(); 
Params = Params.append('actors[]', 'Jane'); 
Params = Params.append('actors[]', 'Elvis'); 
Params = Params.append('actors[]', 'Frances'); 
this.http.get(url, { params: Params }); 

1 und 2 funktioniert nicht so wie Maschinenschrift gibt:

[ts] Argument des Typs 'string []' kann nicht dem Parameter vom Typ 'string' zugewiesen werden.

3 sendet nur ein Element der Schauspieler [] ': ‚Frances‘

+1

Das hängt ganz davon ab, was Ihr Backend erwartet. Natürlich funktionieren 1 und 2 nicht, weil es eine Zeichenfolge erwartet. Sie können ein Array entsprechend den Erwartungen stringieren. – estus

+0

@estus Ich verwende AWS für das Backend. API-Gateway. –

+0

Das erklärt eigentlich nichts. Erwartet es 'Schauspieler = Elvis, ...' Frage? Eine Lösung aus der Antwort sollte dann verwendet werden. Ich musste das Paket https://www.npmjs.com/package/qs für Params verwenden, weil es für Arrays und verschachtelte Objekte mit meinem Express-Backend besser funktionierte. – estus

Antwort

4

Ich denke, der beste Weg, sie zu Parameter als string hinzufügen und haben Ihre Back-End wandeln es wieder in ein array oder list.

let actorList = ['Elvis', 'Jane', 'Frances'] 
let params = new HttpParams(); 
params = Params.append('actors', actorList.join(', '); 
this.http.get(url, { params: Params }); 
+0

Danke! Es funktioniert wie ein Charme –

+0

Glücklich konnte ich helfen :) – Venomy

1

Ich verwende URLSearchParams statt HttpParams.

Mit URLSearchParams müssen Sie Ihr Array stringieren, um es auf Ihren Params "Key-Value-Store" zu setzen.

import { URLSearchParams } from '@angular/http'; 


let params: URLSearchParams = new URLSearchParams(); 
params.set('actors', JSON.stringify(yourArrayHere)); 

Ich denke, das mit HttpParams auf die gleiche Weise funktionieren soll, da sowohl eine Schlüssel-Wert-Zuordnung in der Set-Methode verwenden, um es zu versuchen.

Ich hoffe, das kann Ihnen helfen.

UPDATE:

let options = new RequestOptions({search: params}); 

this._http.get(url, options).map(...) 

mit RequestOptions Sie auch Kopf- und andere Anfrage Optionen bearbeiten können.

+0

[ts] Argument des Typs '{params: URLSearchParams; } 'kann nicht dem Parameter vom Typ' {headers ?: HttpHeaders; beobachten ?: "Körper"; params ?: HttpParams; reportProgress ?: boolean; Antwort ... ". Arten von Eigenschaft 'Params' sind nicht kompatibel. Der Typ 'URLSearchParams' kann nicht dem Typ 'HttpParams' zugewiesen werden. Die Eigenschaft 'map' fehlt im Typ 'URLSearchParams'. –

+0

Ich bekomme diese Ausnahme von Typoskript –

+0

sorry verpasste eine Zeile .. aktualisiert die Antwort – marvstar

Verwandte Themen