J'essaie d'utiliser le nouveau client http qui est sorti avec Angular 4.3. J'ai vérifié les documents et j'utilise la classe HttpParams
mais il ne semble pas fonctionner ou je fais quelque chose de mal. Voici ce que j'ai:
delete(personId: string) {
const params = new HttpParams();
params.set('personId', personId);
return this.http.delete(`${this.baseUrl}`, {
params
});
}
Mais lors de la demande, il n'y a pas de paramètres de requête dans mon url. Toute aide serait appréciée
Les params sont désormais immuables vous devez donc les définir lorsque vous lancez les nouveaux HttpParams donc chaque set () renvoie une nouvelle instance et applique les modifications. Essayer
const params = new HttpParams()
.set('personId', personId);
Voici les documents qui couvrent les en-têtes et les paramètres d'url pour 4.3 - https://angular.io/guide/http#headers
Edit: Je voulais mettre à jour ma réponse et déclarer que vous ne devez pas nécessairement définir les paramètres lorsque vous lancez la classe HttpParams. Par exemple, si vous devez définir des paramètres dans une boucle for ou en dehors de l'initialisation HttpParams, vous pouvez le faire en
const params = new HttpParams()
.set('personId', personId);
params = params.set('personName', personName);
Comme indiqué par les documents:
La classe HttpHeaders est immuable, donc chaque set () renvoie une nouvelle instance et applique les modifications.
set()
crée et renvoie une nouvelle instance de HttpParams, sans muter l'instance sur laquelleset()
est appelée.
Le code doit donc être
const params = new HttpParams().set('personId', personId);
Voici une autre chose avec laquelle j'ai eu du mal à utiliser ce nouveau HttpParams, parfois nous avons n nombre de paramètres à passer, à ce moment-là, il est utile d'avoir une fonction qui convertit l'objet paramètre (que nous utilisions avant Angular 4.3) pour les HttpParams.
Je suggère de faire toHttpParams fonctionner dans votre service couramment utilisé. Vous pouvez donc appeler la fonction pour convertir l'objet en HttpParams .
/**
* 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());
}
Mise à jour:
Depuis 5.0.0-beta.6 (2017-09-03), ils ont ajouté une nouvelle fonctionnalité ( accepter la carte d'objet pour les en-têtes et paramètres HttpClient )
À l'avenir, l'objet peut être transmis directement au lieu de HttpParams.
C'est l'autre raison si vous avez utilisé une fonction commune comme toHttpParams mentionnée ci-dessus, vous pouvez facilement la supprimer ou apporter des modifications si nécessaire.