无法订阅可观察项:“订阅”类型中缺少属性“ _isScalar”

时间:2018-11-26 21:55:24

标签: angular observable subscribe

我正在使用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?

2 个答案:

答案 0 :(得分:1)

有可能在您从“ zen-observable”而不是“ rxjs”导入的行中的某处。在打字稿或javascript文件中签出导入语句。

我知道这有点晚了,但是为了其他人遇到相同的问题,我认为仍然值得发布。

答案 1 :(得分:0)

这是因为您正在将订阅分配给this.watermelons $,而不是可观察的。模板中的异步管道需要可观察的

尝试将分配线与订阅线分离