我有一个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/*';
只会添加我需要的运算符,并跳过导入其余的运算符。但是,我可以看到所有运算符(static和instance)都是Observable类的成员,并通过第一个import语句导入。
我的问题是:
import 'rxjs/add/operator/*';
有什么意义呢?答案 0 :(得分:2)
您也可以在其他地方导入地图,而不仅仅是在您的组件中。尽量不要导入异国情调,例如bufferToggle。它会抛出错误。地图是全部导入和修补的,甚至可能来自Angular本身。
因此,导入特定运算符仍然有意义。 import *会很糟糕,但只导入map可以减少你的包大小。