【问题标题】:Can't subscribe to observable: Property '_isScalar' is missing in type ‘Subscription'无法订阅 observable:“订阅”类型中缺少属性“_isScalar”
【发布时间】: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


【解决方案1】:

您可能从“zen-observable”而不是“rxjs”导入。在您的打字稿或 javascript 文件中检查您的导入语句。

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

【讨论】:

    【解决方案2】:

    这是因为您将订阅分配给 this.watermelons$ 而不是 observable。并且模板中的异步管道需要一个可观察的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-03
      • 2019-06-02
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 2019-01-03
      • 1970-01-01
      相关资源
      最近更新 更多