Наблюдаемый объект в шаблоне вызывает API дважды - PullRequest
1 голос
/ 04 июня 2019

Пример кода:

  public settings$: Observable<
    SettingsResponse
  > = this._service.getSettings().pipe();

Тогда в шаблоне я использую:

{{ (settings$ | async)?.id }}
{{ (settings$ | async)?.config }}

Это делает два вызова API. Как я могу сделать это с наблюдаемым и иметь только 1 звонок?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Ключевое слово as вместе с оператором *ngIf можно использовать для захвата результата канала async, который будет использоваться в остальной части шаблона. Добавьте его в родительский тег или ng-container, если вы не хотите вводить больше элементов в dom.

<ng-container *ngIf="settings$ | async as settings"> // <-- or div
  {{ settings.id }}
  {{ (settings.config }}
</ng-container>

Здесь задокументировано: https://angular.io/api/common/NgIf#storing-a-conditional-result-in-a-variable

1 голос
/ 04 июня 2019

Добавьте оператор shareReplay(1) в свой канал:

public settings$: Observable<SettingsResponse> = this._service.getSettings().pipe(
    shareReplay(1)
);

Это кэширует самое последнее значение и предоставляет его всем подписчикам, включая поздних подписчиков. Если вы не хотите, чтобы поздние подписчики получали самые последние значения и получали значения только по мере их поступления, используйте оператор share.

Подробнее здесь .

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