如何通过打补丁的方式正确导入RxJS?
How to properly import RxJS by patching?
我有一个 Angular 项目,我需要使用来自 RxJS 的 Observables 和一些选择的运算符。
文档是这么说的:
To import only what you need by patching (this is useful for size-sensitive bundling):
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 class 的成员,并通过第一个 import 语句导入。
我的问题是:
- 如何正确地只导入我需要的部分而排除其余部分?
- 如果所有运算符都已经是 Observable 的成员,那么使用
import 'rxjs/add/operator/*';
有什么意义 class?
您也在其他地方导入地图,而不仅仅是在您的组件中。尽量不要导入异国情调的东西,比如 bufferToggle。它会抛出错误。地图已全部导入和修补,甚至可能来自 Angular 本身。
因此,导入特定的运算符仍然有意义。 import * 会很糟糕,但是 import just map 会减少你的包大小。
我有一个 Angular 项目,我需要使用来自 RxJS 的 Observables 和一些选择的运算符。
文档是这么说的:
To import only what you need by patching (this is useful for size-sensitive bundling):
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 class 的成员,并通过第一个 import 语句导入。
我的问题是:
- 如何正确地只导入我需要的部分而排除其余部分?
- 如果所有运算符都已经是 Observable 的成员,那么使用
import 'rxjs/add/operator/*';
有什么意义 class?
您也在其他地方导入地图,而不仅仅是在您的组件中。尽量不要导入异国情调的东西,比如 bufferToggle。它会抛出错误。地图已全部导入和修补,甚至可能来自 Angular 本身。
因此,导入特定的运算符仍然有意义。 import * 会很糟糕,但是 import just map 会减少你的包大小。