Ich habe nach einer Möglichkeit gesucht, Abfrageparameter an einen API-Aufruf mit den neuen zu übergeben HttpClientModule
, HttpClient
und habe noch keine Lösung gefunden. Mit dem alten Http
Modul würden Sie so etwas schreiben.
getNamespaceLogs(logNamespace) {
// Setup log namespace query parameter
let params = new URLSearchParams();
params.set('logNamespace', logNamespace);
this._Http.get(`${API_URL}/api/v1/data/logs`, { search: params })
}
Dies würde zu einem API-Aufruf der folgenden URL führen:
localhost:3001/api/v1/data/logs?logNamespace=somelogsnamespace
Die neue HttpClient
get()
Methode hat jedoch keine search
Eigenschaft, sodass ich mich frage, wo ich die Abfrageparameter übergeben soll.
angular
typescript
http
lodash
angular-httpclient
Joshrathke
quelle
quelle
this.httpClient.get(url, { params }
Check out stackoverflow.com/a/54211610/5042169Antworten:
Am Ende fand ich es über IntelliSense in der
get()
Funktion. Also werde ich es hier für alle posten, die nach ähnlichen Informationen suchen.Wie auch immer, die Syntax ist nahezu identisch, aber leicht unterschiedlich. Anstatt
URLSearchParams()
die Parameter zu verwenden, müssen sie als initialisiert werdenHttpParams()
und die Eigenschaft innerhalb derget()
Funktion wird jetztparams
anstelle von aufgerufensearch
.Eigentlich bevorzuge ich diese Syntax, da sie etwas parameterunabhängiger ist. Ich habe den Code auch überarbeitet, um ihn etwas abgekürzt zu machen.
Mehrere Parameter
Der beste Weg, den ich bisher gefunden habe, besteht darin, ein
Params
Objekt mit allen Parametern zu definieren, die ich definieren möchte. Wie @estus im Kommentar unten hervorhob, gibt es in dieser Frage viele gute Antworten , wie mehrere Parameter zugewiesen werden können.Mehrere Parameter mit bedingter Logik
Eine andere Sache, die ich oft mit mehreren Parametern mache, ist die Verwendung mehrerer Parameter, ohne dass diese bei jedem Aufruf vorhanden sein müssen. Mit Lodash ist es ziemlich einfach, Parameter bedingt zu Aufrufen der API hinzuzufügen / daraus zu entfernen. Die genauen Funktionen, die in Lodash, Underscores oder Vanilla JS verwendet werden, können je nach Anwendung variieren. Ich habe jedoch festgestellt, dass die Überprüfung der Eigenschaftsdefinition recht gut funktioniert. Die folgende Funktion übergibt nur Parameter, die entsprechende Eigenschaften innerhalb der an die Funktion übergebenen Parametervariablen haben.
quelle
let params = new HttpParams(); params.set(...)
funktioniert nicht wie erwartet. Siehe stackoverflow.com/questions/45459532/…new HttpParams({fromObject: { param1: 'value1', ... }});
ist dann der einfachste Ansatz (Winkel 5+)params.set(...)
.Sie können (ab Version 5) die Konstruktorparameter fromObject und fromString verwenden, wenn Sie HttpParamaters erstellen, um die Arbeit zu vereinfachen
oder:
quelle
const params = {'key': 'value'}
zu:http.get('/get/url', { params: params })
Sie können es so übergeben
quelle
params
Eine präzisere Lösung:
quelle
Mit Angular 7 funktionierte es wie folgt, ohne HttpParams zu verwenden.
quelle
Wenn Sie ein Objekt haben, das in
{key: 'stringValue'}
Paare konvertiert werden kann, können Sie diese Verknüpfung verwenden, um es zu konvertieren:Ich liebe die Spread-Syntax!
quelle
Joshrathke hat recht.
In angular.io docs wird geschrieben, dass URLSearchParams von @ angle / http veraltet ist . Stattdessen sollten Sie HttpParams von @ angle / common / http verwenden . Der Code ist ziemlich ähnlich und identisch mit dem, was Joshrathke geschrieben hat. Für mehrere Parameter, die beispielsweise in einem Objekt wie gespeichert werden
du könntest es auch tun
Wenn Sie geerbte Eigenschaften benötigen, entfernen Sie die hasOwnProperty entsprechend.
quelle
Die Sucheigenschaft vom Typ URLSearchParams in der RequestOptions- Klasse ist in Winkel 4 veraltet. Stattdessen sollten Sie die Eigenschaft params vom Typ URLSearchParams verwenden .
quelle