如何使用异步管道而不是使用订阅?

How do I use async pipe instead of using subscribe?

我想使用异步管道“| async”而不是订阅。这是我的订阅代码目前的样子:

ngOnInit(): void {
  this.activatedRoute.url
    .pipe(takeUntil(this.unsubscribe$))
      .subscribe(segments => {
        this.quizName = segments[1].toString();
      });
}

在我的模板中我有:<mat-card *ngIf="quiz.quizId === quizName">

让我们试试这个:

quizName$: Observable<any>;

ngOnInit(): void {
  this.quizName$ = this.activatedRoute.url
    .pipe(
      takeUntil(this.unsubscribe$),
      map(segments => segments[1].toString()); // Not sure about this part
    );
}
<mat-card *ngIf="(quizName$ | async) === quiz.quizId">

小心,每次在模板中使用异步管道时,它都会进行订阅。

添加变量:

quizName$ = this.activatedRoute.url.pipe(map(segments => segments[1].toString()));
  1. 不需要 takeUntil 诸如“| async”就可以了
  2. 可选(您的 IDE 会自己知道)
quizName$: Observable<string> ...

在HTML中:

*ngIf="(quizName$ | async) === quiz.quizId"

更“稳健”的解决方案

showQuiz$: Observable<boolean> = this.activatedRoute.url.pipe(
  map(segments => segments[1].toString()),
  map(quizName => quizName === this.quiz && this.quiz.id)
);
*ngIf="showQuiz$ | async"