May 25, 2023

Как использовать *ngIf с Async Pipe

Чтобы вывести два Observable значения в шаблоне с *ngIf нужно сделать следующее:

<div *ngIf="product$ | async as product && price$ | async as price">
    <b>{{product}}</b> and <b>{{price}}</b>
</div>

Лучшим решением будет скомбинировать два значения можно внутри компонента используя withLatestFrom, но обязательно нужно проверять на null в шаблоне productPrice?.price.

Самым лучшим вариантом комбинации двух Observable значений будет испльзование вложенных *ngIf.

<ng-container *ngIf="product$ | async as product">
  <div *ngIf="price$ | async as price">
    <b>{{product}}</b> and <b>{{price}}</b>
  </div>
<ng-container>

При этом следует учесть, что запросы будут выполняться последовательно.

Если требуется выполнить запросы одновременно, то уровней вложенности следует добавить.

<ng-container *ngIf="{ product: product$ | async, price: price$ | async } 
              as productPrice">
  <ng-container *ngIf="productPrice.product as product">
    <ng-container *ngIf="productPrice.price as price">
      <div><b>{{product}}</b> and <b>{{price}}</b></div>
    </ng-container>
  </ng-container>
</ng-container>

https://blog.angular-university.io/angular-reactive-templates/