Bonjour, j'essaie d'obtenir les détails de l'utilisateur de manière angulaire et en fonction des valeurs de l'utilisateur dont j'ai besoin pour effectuer une tâche spécifique, je suis capable de passer l'appel à l'API mais la réponse prend du temps et c'est pourquoi je ne peux pas vérifier le condition.
getUserProfile(user: UserVM): Observable<any> {
return this.http.post<UserVM>(this.getAPI('FetchUserProfile'),user,
this.httpOptions).pipe(
map(data => data),
catchError(this.handleError<any>('getUserProfile'))
);
}
Ici, l'utilisateur est l'objet de type UserVM Model qui contient le champ booléen PrivacyNotice
Voici la méthode de service qui fait l'appel de l'API
ngOnInit() {
this.getUserDetails();
if(this.user.PrivacyNotice) //getting undefined here
{
}
else
{
}
}
getUserDetails() {
this.user.Email = "test@test.com";
this.bookingListSubscription =
this.restService.getUserProfile(this.user).subscribe(
data => {
this.user = data;
});
}
si je veux vérifier la valeur de l'indicateur booléen PrivacyNotice qui est renvoyé par l'API, comment puis-je y parvenir.
3 Réponses :
Vous pouvez utiliser un opérateur map ou tap . Quelque chose comme ceci:
ngOnInit() {
this.user.Email = "test@test.com";
this.restService.getUserProfile(this.user)
.subscribe((user) => {
if ((this.user.PrivacyNotice))
{
-- -- --
} else {
-- -- --
}
});
}
Ou mieux , débarrassez-vous simplement de la fonction getUserDetails en premier lieu car pour le moment, cela ne fonctionne pas Cela ne semble pas très utile:
import { tap } from 'rxjs/operators';
...
ngOnInit() {
this.getUserDetails()
.subscribe((user) => {
if ((this.user.PrivacyNotice))
{
-- -- --
} else {
-- -- --
}
});
}
getUserDetails() {
this.user.Email = "test@test.com";
return this.restService.getUserProfile(this.user).pipe(
tap(data => this.user = data)
);
}
Habituellement, tant que vous êtes dans un état de chargement, vous affichez un indicateur de chargement:
Exemple:
<div *ngIf="loading else #loaded"> Loading... </div> <ng-template #loaded> The data is loaded, display them as you wish </ng-template>
et dans votre * .html p >
loading = ture;
ngOnInit() {
this.getUserDetails();
}
getUserDetails() {
this.user.Email = "test@test.com";
this.bookingListSubscription =
this.restService.getUserProfile(this.user).subscribe(
data => {
this.user = data;
if((this.user.PrivacyNotice))
{
------
}
else
{
------
}
loading = false;
});
}
Merci pour la réponse Monsieur
cela peut être fait en utilisant une valeur booléenne. ici, j'ai pris terminé comme une valeur booléenne. Une fois les données attribuées à l'utilisateur, la valeur booléenne sera maintenant remplacée par true et vous pouvez l'utiliser selon vos besoins, que ce soit pour afficher un spinner d'appeler une méthode, etc.
completed=false;
ngOnInit() {
this.getUserDetails();
if(completed){
if((this.user.PrivacyNotice)) //getting undefined here
{
------
}
else
{
------
}
}
}
getUserDetails() {
this.user.Email = "test@test.com";
this.bookingListSubscription =
this.restService.getUserProfile(this.user).subscribe(
data => {
this.user = data;
this.completed=true;
});
}
p >
Merci pour la réponse Monsieur, je vais essayer