我正在尝试了解导入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?
答案 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号是正确的。