我正在使用Angle 6应用程序。我有一个观察不到的地方,不会让我订阅它。我需要订阅它,以便将我的加载标志设置为false,以指示数据已完成加载。
这是我的意思:
我的页面如下:
<div *ngFor="let element of watermelons$ | async">
…
</div>
西瓜$是一个可观察到的东西,它的加载方式如下:
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?
答案 0 :(得分:1)
有可能在您从“ zen-observable”而不是“ rxjs”导入的行中的某处。在打字稿或javascript文件中签出导入语句。
我知道这有点晚了,但是为了其他人遇到相同的问题,我认为仍然值得发布。
答案 1 :(得分:0)
这是因为您正在将订阅分配给this.watermelons $,而不是可观察的。模板中的异步管道需要可观察的
尝试将分配线与订阅线分离