Я успешно подписываюсь на наблюдаемое в нескольких различных компонентах моего приложения Angular / Ionic. Однако, поскольку я делаю это вручную, это также означает, что мне нужно вручную отказаться от подписки на них, что я в настоящее время делаю в моем крючке жизненного цикла ngOnDestroy()
.
Реализация кода компонента, которая у меня работает, которая работает, выглядит так:
getPlayerStats() {
this.playerSubscription = this.mainService.getPlayerStats(this.username).subscribe(
user => {
this.user = user;
},
error => this.errorMsg = error
);
}
Код моего представления для компонента выглядит так:
<ion-card *ngIf="user">
... display user info
</ion-card>
А вызываемый здесь сервисный метод выглядит так:
getPlayerStats(username: string) {
const req = `users/stats/${username}`;
return this.apiService.sendRequest(req);
}
То, что я хотел бы сделать, но мне трудно приступить к работе, - это использовать канал async
для подписки в моем представлении HTML. Это было бы чище, потому что тогда мне не пришлось бы быть таким многословным, и мне не пришлось бы вручную подписываться и отказываться от подписки в компонентах, где я это использую. Насколько я понимаю, это также рекомендуемый способ обработки этих сценариев именно по этим причинам.
Как бы выглядел этот код? Я пробовал это, но это не сработало:
getPlayerStatus() {
this.user = this.mainService.getPlayerStats(this.username);
}
И в моем представлении HTML я сделал это:
<ion-card *ngIf="user | async">
... display user info
</ion-card>
Но, как я уже сказал, это не работает. Что мне здесь нужно изменить? Как я могу вызвать метод service getPlayerStats()
, но обработать подписку в представлении компонентов с помощью async pipe?