使用建议的运营商导入无法调用RxJS共享

时间:2018-01-14 14:00:52

标签: rxjs rxjs5 rxjs-lettable-operators

我正在尝试了解导入rxjs运算符的最佳实践

似乎我应该以这种方式导入share,但是,以下内容不起作用,因为它表示共享需要0个参数。我不太确定如何正确调用share

import { share } from 'rxjs/operators';

...

public currentUser: Observable<User> = share(this.currentUser$.asObservable());

以旧的方式做到这一点不会造成任何问题。但是我似乎已经读过这不是导入https://www.learnrxjs.io/concepts/operator-imports.html

的首选方法
import 'rxjs/add/operator/share';

...

public currentUser: Observable<User> = this.currentUser$.asObservable().share();

如果我使用推荐的导入方式,我该如何调用share?

3 个答案:

答案 0 :(得分:2)

使用share与任何其他“pipable”运算符一样,因为RxJS 5.5:

import { share } from 'rxjs/operators';

...

this.currentUser$.pipe(share());

有关pipable运算符的更多详细信息,请参阅:https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

但请注意,从rxjs/operators导入导入整个文件https://github.com/ReactiveX/rxjs/blob/master/src/operators/index.ts 这意味着如果您自己捆绑您的应用,它的大小可能会显着增加。

因此,您可能希望从其自己的文件中导入每个运算符,如:

import { share } from 'rxjs/internal/operators/share';

...然后以同样的方式使用它。

这并不总是必要的。如果您正在使用预配置的构建系统,例如angular-cli,它会为您执行路径映射,因此您无需担心它并始终使用rxjs/operators。您可以阅读更多相关信息:

答案 1 :(得分:0)

在RxJs 5.5以后,RxJs引入了Pipeable(或lettable)运算符。请在此处详细阅读:https://github.com/ReactiveX/rxjs/blob/master/doc/pipeable-operators.md

简而言之,在Rxjs 5.5中使用以下方式是很好的,特别是如果你使用的是打字稿。

import { share } from 'rxjs/operators';

答案 2 :(得分:0)

导入import { share } from 'rxjs/operators'的第一种方法是错误的,因为这只是导入share运算符类而不是方法运算符。

在第二个示例中import 'rxjs/add/operator/share'这是正确的,因为它表示我想将share运算符添加到我的observable中。

还有像Chybie这样的rxjs 5.5中的letable运算符,但对于你的用例2号是正确的。