Rxjs v 6.*
新版本的rxjs更加简化。
1)操作符
import {map} from 'rxjs/operators';
2) 其他
import {Observable,of, from } from 'rxjs';
我们需要使用管道而不是链接。例如:
旧语法:
source.map().switchMap().subscribe()
新语法:
source.pipe(map(), switchMap()).subscribe()
注意: 由于与JavaScript保留字相同的名称冲突,一些操作符更名了!它们包括:
do
-> tap
,
catch
-> catchError
switch
-> switchAll
finally
-> finalize
Rxjs v5.*
我撰写这篇答案部分原因是每次需要导入一个操作符时都要查看文档。如果有更好的方法,请告诉我。
1) import { Rx } from 'rxjs/Rx'
;
这将导入整个库。然后您无需担心加载每个操作符。但是需要附加Rx。我希望树摇能够优化并仅选择所需的函数(需要验证)如评论中所述,Tree-shaking无法帮助。因此,这不是最优化的方式。
public cache = new Rx.BehaviorSubject('');
或者您可以导入特定的运算符。
这将优化您的应用程序仅使用这些文件:
2)import { _______ } from 'rxjs/_________';
这种语法通常用于主对象,例如Rx
本身或Observable
等。
可以使用此语法导入的关键字:
Observable, Observer, BehaviorSubject, Subject, ReplaySubject
3) import 'rxjs/add/observable/__________';
Angular 5更新说明
在使用rxjs 5.5.2+的Angular 5中,导入代码为:
import { empty } from 'rxjs/observable/empty';
import { concat} from 'rxjs/observable/concat';
通常这些会直接与 Observable 一起使用。例如:
Observable.from()
Observable.of()
可以使用此语法导入的其他关键字,包括:
concat, defer, empty, forkJoin, from, fromPromise, if, interval, merge, of,
range, throw, timer, using, zip
4) import 'rxjs/add/operator/_________';
Angular 5 更新说明
在使用 rxjs 5.5.2+ 的 Angular 5 中,导入操作符的方式发生了变化。
import { filter } from 'rxjs/operators/filter';
import { map } from 'rxjs/operators/map';
这些通常在Observable创建后的流中出现。就像代码片段中的flatMap
:
Observable.of([1,2,3,4])
.flatMap(arr => Observable.from(arr));
使用此语法的其他关键字:
audit, buffer, catch, combineAll, combineLatest, concat, count, debounce, delay,
distinct, do, every, expand, filter, finally, find , first, groupBy,
ignoreElements, isEmpty, last, let, map, max, merge, mergeMap, min, pluck,
publish, race, reduce, repeat, scan, skip, startWith, switch, switchMap, take,
takeUntil, throttle, timeout, toArray, toPromise, withLatestFrom, zip
FlatMap:
flatMap
是mergeMap
的别名,因此我们需要导入mergeMap
才能使用flatMap
。
/add导入注意事项:
在整个项目中我们只需要导入一次。因此建议在一个地方完成。如果它们被包含在多个文件中,并且其中一个文件被删除,构建将因错误原因而失败。
import {Observable} from 'rxjs/Observable';
这句话会引入Observable
,但是如果你正在使用 promises,你不需要全部引入它...toPromise
可以胜任。 - AT82toPromise
,我需要单独导入哪些内容?我正在使用Observable,我应该在问题中澄清这一点。实际上这是两个不同的问题。 - Danoramimport 'rxjs/add/operator/toPromise';
请参考https://angular.io/docs/ts/latest/tutorial/toh-pt6.html 这应该会对你有所帮助 :) - AT82