【发布时间】:2018-05-20 01:09:32
【问题描述】:
我有一个 Angular 项目,我需要使用来自 RxJS 的 Observables 和一些运算符。
文档是这样说的:
通过修补仅导入您需要的内容(这对于大小敏感的捆绑很有用):
import { Observable} from 'rxjs/Observable'; import 'rxjs/add/observable/of'; import 'rxjs/add/operator/map'; Observable.of(1,2,3).map(x => x + '!!!'); // etc
这就是我在我的应用组件中所做的:
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
import 'rxjs/add/operator/map';
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
private testObservable: Observable<string> = Observable.of(1,2,3).map(x => x + '!!!');
constructor() { }
ngOnInit() {
this.testObservable.subscribe((str: string) => {
console.log(str);
});
}
}
这就是我感到困惑的地方。当我删除第二个和第三个导入(of 和 map)时,Observable 的操作符仍然有效!
我的印象是使用 import 'rxjs/add/operator/*'; 只会添加我需要的运算符,而跳过导入其余的运算符。但是,我可以看到所有运算符(静态和实例)都是 Observable 类的成员,并通过第一个 import 语句导入。
我的问题是:
- 如何正确只导入我需要的部分而排除其余部分?
- 如果所有运算符都已经是 Observable 类的成员,那么使用
import 'rxjs/add/operator/*';有什么意义?
【问题讨论】:
-
你可能想要更新到 RxJS 5.5。此版本使运算符的导入更加舒适,引入了可出租的运算符:github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md
-
感谢您提及可出租的运营商。我正在使用 RxJS 5.5,但我不知道新功能。
标签: angular typescript rxjs rxjs5 angular2-observables