Привет, я пытаюсь получить данные о пользователе в angular и на основе пользовательских значений, которые мне нужны для выполнения конкретной задачи, я могу сделать вызов API, но ответ занимает некоторое время, и поэтому я не могу проверить условие.
ngOnInit() {
this.getUserDetails();
if (this.user.PrivacyNotice) //getting undefined here
{
}
else
{
}
}
getUserDetails() {
this.user.Email = "[email protected]";
this.bookingListSubscription =
this.restService.getUserProfile(this.user).subscribe(
data => {
this.user = data;
});
}
Здесь пользователь — это объект типа UserVM Model, который содержит логическое поле PrivacyNotice.
Ниже приведен метод службы, который выполняет вызов API.
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'))
);
}
если я хочу проверить значение логического флага PrivacyNotice, который возвращается из API, так как я могу этого добиться.





Вы можете использовать map или оператора tap. Что-то вроде этого:
import { tap } from 'rxjs/operators';
...
ngOnInit() {
this.getUserDetails()
.subscribe((user) => {
if ((this.user.PrivacyNotice))
{
-- -- --
} else {
-- -- --
}
});
}
getUserDetails() {
this.user.Email = "[email protected]";
return this.restService.getUserProfile(this.user).pipe(
tap(data => this.user = data)
);
}
Или лучше, просто избавьтесь от функции getUserDetails в первую очередь, так как на данный момент она не кажется очень полезной:
ngOnInit() {
this.user.Email = "[email protected]";
this.restService.getUserProfile(this.user)
.subscribe((user) => {
if ((this.user.PrivacyNotice))
{
-- -- --
} else {
-- -- --
}
});
}
Обычно, пока вы находитесь в состоянии загрузки, отображается индикатор загрузки:
Пример:
loading = ture;
ngOnInit() {
this.getUserDetails();
}
getUserDetails() {
this.user.Email = "[email protected]";
this.bookingListSubscription =
this.restService.getUserProfile(this.user).subscribe(
data => {
this.user = data;
if ((this.user.PrivacyNotice))
{
------
}
else
{
------
}
loading = false;
});
}
и в вашем *.html
<div *ngIf = "loading else #loaded">
Loading...
</div>
<ng-template #loaded>
The data is loaded, display them as you wish
</ng-template>
это можно сделать, используя логическое значение. здесь я взял завершено как логическое значение. После того, как данные будут назначены пользователю, логическое значение теперь будет изменено на true, и вы можете использовать его в соответствии с вашими требованиями, показывать ли счетчик вызова метода и т. д.
completed=false;
ngOnInit() {
this.getUserDetails();
if (completed){
if ((this.user.PrivacyNotice)) //getting undefined here
{
------
}
else
{
------
}
}
}
getUserDetails() {
this.user.Email = "[email protected]";
this.bookingListSubscription =
this.restService.getUserProfile(this.user).subscribe(
data => {
this.user = data;
this.completed=true;
});
}
Спасибо за ответ, сэр, я попробую
Спасибо за ответ, сэр