【问题标题】:Angular 5 to 6 Upgrade: Property 'map' does not exist on type ObservableAngular 5 到 6 升级:Observable 类型上不存在属性“地图”
【发布时间】:2018-10-16 14:42:17
【问题描述】:

我已将我的 Angular 应用程序从版本 5 升级到 6,并且我从以下代码中收到此错误。

  const request = this.evidenceService.get().map((res) => res.data)
                .catch(error => Observable.of(null));

“可观察”类型上不存在属性“地图”。

【问题讨论】:

标签: angular rxjs


【解决方案1】:

在 RXJS v6 中,操作符链接已转换为使用 .pipe(),您应该遵循 recommended migration path for RXJS。此外,catch 运算符已重命名为 catchError

现在应该这样做:

const request = this.evidenceService.get().pipe(
    map((res) => res.data)),
    catchError(error => Observable.of(null))
  );

【讨论】:

  • 你说得对,这实际上不是导入的问题,而是过渡到管道的问题,rxjs-compat 不太可能有帮助。我会调整答案。
  • 这是救命稻草。
【解决方案2】:

根据https://www.academind.com/learn/javascript/rxjs-6-what-changed/

过去

import 'rxjs/add/operator/map'

myObservable
  .map(data => data * 2)
  .subscribe(...);

现在

import { map } from 'rxjs/operators';

myObservable
  .pipe(map(data => data * 2))
  .subscribe(...);

【讨论】:

    【解决方案3】:

    This solved my problem 这是代码:

    import { map } from "rxjs/operators";
    

    **********************************************示例**下面********************************************

    getPosts(){
    this.http.get('http://jsonplaceholder.typicode.com/posts')
    .pipe(map(res => res.json()));
    }
    }
    

    【讨论】:

    • 如果你想使用所有版本安装:npm install --save rxjs-compatimport { Observable, Subject } from 'rxjs'; import 'rxjs/add/operator/map'; import 'rxjs/add/operator/catch';
    【解决方案4】:

    使用

    .pipe(map((res) => res.data))
    

    而不是

    .map((res) => res.data)
    

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2018-11-30
      • 2018-11-25
      • 2018-09-19
      • 2018-10-28
      • 2018-11-04
      • 2019-04-11
      • 2018-07-12
      相关资源
      最近更新 更多