物业&#39;第一&#39;在类型&#39; Observable <string>&#39;

时间:2018-05-22 08:37:49

标签: angular typescript rxjs

在Angular 5中,我想使用first()方法,如下所示:

this.ccService.mode.first().subscribe(mode => {
  this.mode = mode;
});

我是这样导入的:import { first } from 'rxjs/operators/first';。 我还尝试从'rxjs/add/operator''rxjs/operators''rxjs'导入,但似乎都无法正常工作。

但是,它拒绝工作,只给出了您在标题中看到的错误消息:[ts] Property 'first' does not exist on type 'Observable<string>'.

mode可观察:

private modeSource = new BehaviorSubject<string>('new');
public mode = this.modeSource.asObservable();

public setMode(mode: string) {
  this.modeSource.next(mode);
}

我一直在谷歌搜索,但我似乎找不到任何有同样错误的人,我只是没有使用first()对吗?我应该使用.pipe(first()).subscribe吗? https://www.learnrxjs.io/operators/filtering/first.html间歇性地使用observable.first().subscribeobservable.pipe(first()).subscribe而没有明确的解释或推理,所以我在这里有点迷失。

1 个答案:

答案 0 :(得分:5)

TL; DR;是的,你应该使用可管理的操作符。

rxjs v5.5以来的变更:

  

链接运算符的先前编码风格已被替换   将一个操作员的结果输送到另一个操作员可管理的操作员   在5.5版中添加。有关推理和完整的讨论   可管道运算符所需的更改,请参阅RxJS文档。

这是why

  

用于点链的修补运算符的问题是:

     

任何导入补丁运算符的库都会增加   该库的所有消费者的Observable.prototype,造成盲目   依赖。如果库删除了他们的用法,他们会在不知不觉中   打破其他人。使用pipeables,您必须导入运算符   你需要在你使用它们的每个文件中。

     

直接打印到原型上的操作员不是“树木可摇动的”   通过rollup或webpack等工具。可管理的操作员将像他们一样   只是直接从模块中提取的函数。

     

无法检测到在应用中导入的未使用的运算符   可靠地通过任何类型的构建工具或棉绒规则。这意味着   您可以导入扫描,但停止使用它,它仍然被添加   到您的输出包。如果您不使用,可以使用可管理的操作员   它,一个棉绒规则可以为你挑选。

     

功能性成分非常棒。构建自己的自定义运算符   变得更容易,现在他们的工作和看起来就像所有人一样   来自rxjs的其他运营商。您不需要扩展Observable或   再次超越升力。