【发布时间】:2019-04-28 14:31:18
【问题描述】:
我正在使用 Angular 6 应用程序。我有一个不允许我订阅的 observable。我需要订阅它才能将我的加载标志设置为 false 以指示数据已完成加载。
这就是我的意思:
我的页面如下所示:
<div *ngFor="let element of watermelons$ | async">
…
</div>
Watermelons$ 是一个像这样加载的 observable:
ngOnInit() {
…
this.watermelons$ = this._watermelonService.getWatermelon(true, this._watermelonId);
…
}
我还有一个标志来指示西瓜数据是否正在加载:
Private _loading : boolean;
…
constructor(…) {
this._loading = true;
}
在页面上,我有一个微调器,显示 _loading 是否为真:
<div class="app-loading" *ngIf="_loading">
<mat-spinner diameter=100></mat-spinner>
</div>
我希望能够通过将 _loading 设置为 false 来关闭微调器。通常,我会在订阅西瓜 $ 时这样做:
ngOnInit() {
…
this.watermelons$ = this._watermelonService.getWatermelon(true, this._watermelonId)
.subscribe(watermelonData => {
this._loading = false;
});
…
}
但它不会让我订阅。当我尝试这个时,我收到以下错误:
Type 'Subscription' is not assignable to type 'Observable<Object>'.
Property '_isScalar' is missing in type ‘Subscription'.
这是什么意思,我该如何解决?是否有另一种方法可以检测数据何时加载,然后将_loading设置为false?
【问题讨论】:
-
它告诉你问题是什么;订阅的结果是订阅,它不是可观察的。查看 observable 运算符,有很多选项可以在流上进行操作。
-
删除了我的答案,因为这是一个老话题,答案已经在上面的评论中了。
标签: angular observable subscribe