Je cherchais un moyen de transmettre des paramètres de requête dans un appel API avec la nouvelle de HttpClientModule
l » HttpClient
et il va falloir trouver une solution. Avec l'ancien Http
module, vous écririez quelque chose comme ça.
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 })
}
Cela entraînerait un appel d'API à l'URL suivante:
localhost:3001/api/v1/data/logs?logNamespace=somelogsnamespace
Cependant, la nouvelle HttpClient
get()
méthode n'a pas de search
propriété, donc je me demande où passer les paramètres de requête?
angular
typescript
http
lodash
angular-httpclient
Joshrathke
la source
la source
this.httpClient.get(url, { params }
Consultez stackoverflow.com/a/54211610/5042169Réponses:
J'ai fini par le trouver via IntelliSense sur la
get()
fonction. Donc, je le posterai ici pour tous ceux qui recherchent des informations similaires.Quoi qu'il en soit, la syntaxe est presque identique, mais légèrement différente. Au lieu d'utiliser
URLSearchParams()
les paramètres doivent être initialisés en tant queHttpParams()
et la propriété dans laget()
fonction est maintenant appelée à laparams
place desearch
.En fait, je préfère cette syntaxe car elle est un peu plus indépendante des paramètres. J'ai également remanié le code pour le rendre légèrement plus abrégé.
Paramètres multiples
Le meilleur moyen que j'ai trouvé jusqu'à présent est de définir un
Params
objet avec tous les paramètres que je veux définir définis à l'intérieur. Comme @estus l'a souligné dans le commentaire ci-dessous, cette question contient de nombreuses réponses intéressantes sur la manière d'attribuer plusieurs paramètres.Paramètres multiples avec logique conditionnelle
Une autre chose que je fais souvent avec plusieurs paramètres est d'autoriser l'utilisation de plusieurs paramètres sans exiger leur présence à chaque appel. En utilisant Lodash, il est assez simple d'ajouter / supprimer conditionnellement des paramètres d'appels à l'API. Les fonctions exactes utilisées dans Lodash ou Underscores, ou vanilla JS peuvent varier en fonction de votre application, mais j'ai trouvé que la vérification de la définition de propriété fonctionne plutôt bien. La fonction ci-dessous ne transmettra que les paramètres qui ont des propriétés correspondantes dans la variable de paramètres transmise à la fonction.
la source
let params = new HttpParams(); params.set(...)
ne fonctionnera pas comme prévu. Voir stackoverflow.com/questions/45459532/…new HttpParams({fromObject: { param1: 'value1', ... }});
c'est l'approche la plus simple (angulaire 5+) alorsparams.set(...)
.Vous pouvez (dans la version 5+) utiliser les paramètres du constructeur fromObject et fromString lors de la création de HttpParamaters pour rendre les choses un peu plus faciles
ou:
la source
const params = {'key': 'value'}
à:http.get('/get/url', { params: params })
Tu peux le passer comme ça
la source
params
Une solution plus concise:
la source
Avec Angular 7, je l'ai fait fonctionner en utilisant ce qui suit sans utiliser HttpParams.
la source
Si vous avez un objet qui peut être converti en
{key: 'stringValue'}
paires, vous pouvez utiliser ce raccourci pour le convertir:J'adore la syntaxe de diffusion!
la source
Joshrathke a raison.
Dans les documents angular.io, il est écrit que URLSearchParams de @ angular / http est obsolète . Au lieu de cela, vous devriez utiliser HttpParams à partir de @ angular / common / http . Le code est assez similaire et identique à ce que joshrathke a écrit. Pour plusieurs paramètres qui sont enregistrés par exemple dans un objet comme
tu pourrais aussi faire
Si vous avez besoin de propriétés héritées, supprimez le hasOwnProperty en conséquence.
la source
La propriété de recherche de type URLSearchParams dans la classe RequestOptions est obsolète dans angular 4. À la place, vous devez utiliser la propriété params de type URLSearchParams .
la source