我的预加载器代码是
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()
为什么我没有收到 Loading...的消息?
因为它不是一个队列在订阅的那一刻,它没有重播所有以前的事件。
尝试BehaviorSubject,而不是它将保持新用户的最后一个值。
private preloaderState$ = new BehaviorSubject<boolean>(false);
当您在视图中绑定方法时,它在每次变化检测触发和每次为该主题创建新的订阅并等待下一个状态时被调用。调用此方法一次并绑定到视图中。