Angular 9 force asyn c pipe вложен в ngIf asyn c pipe - PullRequest
0 голосов
/ 08 мая 2020
<ng-container *ngIf="condition$ | async">
    {{ value$ | async }}
</ng-container>

Как я могу заставить представление отображать последнее значение, когда условие $ выдает истину после ложного?


Обновление

условие $ и значение $ оба являются производными тот же formGroup.valueChanges и не может быть экземпляром BehaviorSubject.

Ответы [ 3 ]

0 голосов
/ 08 мая 2020

Вы можете сделать это, добавив shareReplay к value$ наблюдаемому:

<ng-container *ngIf="condition$ | async">
    {{ value$ | async }}
</ng-container>
value$ = obs$.pipe(
  shareReplay(1)
);

Или используя BehaviorSubject или ReplaySubject

0 голосов
/ 08 мая 2020

вы можете сделать следующее, чтобы предотвратить отказ от подписки на внутреннюю форму вычитания

<ng-container *ngIf="{val: value$ | async} as source">
  <div *ngIf="condition$ | async">
   {{ source.val }}
  </div>
</ng-container>

пример

0 голосов
/ 08 мая 2020

А как насчет того, чтобы объединить эти два и иметь одну наблюдаемую и подобную подписку. .ts

this.viewObservable$ = combineLatest(
      this.condition$,
      this.value$
    ).pipe(
      map(([condition, value]) => {
        return {
          condition,
          value
        }
      })
    )

и в вашем. html вы можете это сделать

<ng-container *ngIf="(viewObservable$ | async) as data && data.condition">
  {{ data.value }}
</ng-container>

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...