Наблюдаемый результат не работает в шаблоне? - PullRequest
0 голосов
/ 23 апреля 2020

Мой код предварительного загрузчика:

import { Injectable } from "@angular/core";
import { Subject, Observable } from 'rxjs';

@Injectable()
export class SpinnerService {
  private preloaderState$ = new Subject<boolean>();

  activate() {
    this.preloaderState$.next(true);
  }

  disactivate() {
    this.preloaderState$.next(false);
  }

  preloader(): Observable<boolean> {
    return this.preloaderState$.asObservable();
  }
}

Шаблон:

<div *ngIf="spinnerService.preloader() | async">Loading...</div>

Предварительный загрузчик активации:

this.spinnerService.activate()

Почему я не получаю сообщение Загрузка .. .

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Когда вы связываете видимый метод, он вызывается при каждом триггере обнаружения изменений и каждый раз, когда вы создаете новую подписку на эту тему и ожидаете следующего состояния. Вызовите этот метод один раз и прикрепите для просмотра.

0 голосов
/ 23 апреля 2020

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

попробуйте BehaviorSubject, вместо этого он будет хранить последнее значение для новых подписчиков

private preloaderState$ = new BehaviorSubject<boolean>(false);
...