AsyncPipe无法正常运行,原因不明

时间:2019-02-01 09:06:22

标签: angular

组件:

loading: boolean = false;
loading$ = new Subject<boolean>();

ngOnInit(): void {
  this.loading$.subscribe(e => { this.loading = e; });
  ...
}

模板:

<div *ngIf="loading$ | async">
   <h1>Loading 1 ...</h1>
</div>

<div *ngIf="loading">
   <h1>Loading 2 ...</h1>
</div>

Loading 2适用,但Loading 1不适用。可能是什么原因?

2 个答案:

答案 0 :(得分:2)

尝试从代码中删除订阅-async将自动执行该操作。

loading: boolean = false;
loading$ = new Subject<boolean>();

ngOnInit(): void {

}

答案 1 :(得分:1)

这是因为您的loading$主题没有任何初始值。

您需要将值传递给主题或使用BehaviorSubject

第一种方式:

loading: boolean = false;
loading$ = new Subject<boolean>();

constructor() {
  this.loading$.next(true);
}

第二种方式:

loading$ = new BehaviorSubject<boolean>(true);

进一步阅读:

https://medium.com/@luukgruijs/understanding-rxjs-behaviorsubject-replaysubject-and-asyncsubject-8cc061f1cfc0