无法在 RxJs 6 和 Angular 6 中使用 Observable.of

Posted

技术标签:

【中文标题】无法在 RxJs 6 和 Angular 6 中使用 Observable.of【英文标题】:Could not use Observable.of in RxJs 6 and Angular 6 【发布时间】:2018-10-17 15:39:23 【问题描述】:
 import  Observable, of  from "rxjs";

// And if I try to return like this
  return Observable.of(this.purposes);

我收到一条错误消息,指出“typeof Observable”类型上不存在属性“of”

【问题讨论】:

在 v6 中它只是 return of(this.purposes) 这是在哪里记录的?典型的行是“你从一个地方拉入你需要的任何运算符,在'rxjs/operators'下”这显然与创建不同,但不清楚静态方法是否已被替换。这些导入知识分散在整个银河系中,就像我正在寻找刚刚失去时间的 Tox U。 【参考方案1】:

看起来卡坦特的评论是正确的,RxJS upgrade guide 没有具体涵盖该方法,但确实说 “对可观察对象进行操作的类已被函数替换”

这似乎意味着所有或大部分类方法(如 .of、.throw 等)已被函数替换

所以不是

import  Observable, of  from "rxjs";
Observable.of(this.purposes);

import  of  from "rxjs";
of(this.purposes);

【讨论】:

从 'rxjs/observable/of' 导入 of ; reduce() 呢? reduce() 已移至运算符,因此您可以使用 import reduce from 'rxjs/operators'; 导入它 这是一个可怕的变化。这些方法应该像以前一样是类上的静态方法。现在更容易发生名称冲突。 您可以对更改有一个概览academind.com/learn/javascript/rxjs-6-what-changed【参考方案2】:

rxjs 6

import  PreloadingStrategy, Route  from '@angular/router';
import  Observable, of  from 'rxjs';

export class SelectivePreloadingStrategy implements PreloadingStrategy 
    preload(route: Route, load: Function): Observable<any> 
       return route.data && route.data.preload === false ? of(null) : load();
    

 

【讨论】:

【参考方案3】:

要避免black-list linting of the rxjs,请像这样导入它们:

import  Observable  from 'rxjs/Observable';
import  of  from 'rxjs/observable/of';

【讨论】:

以上是关于无法在 RxJs 6 和 Angular 6 中使用 Observable.of的主要内容,如果未能解决你的问题,请参考以下文章

RxJS 6有哪些新变化?

Angular 6 和 RxJS 6 重大变化

更新到 Angular 6 和 rxjs 6 后 Plunker 坏了

Angular 7、Ngrx、Rxjs 6 - 访问延迟加载模块之间的状态

Angular:如何使用 RXJS 6 调用 finally()

Angular 6 RXJS 导入语法?