如何通过修补来正确导入RxJS?

时间:2017-12-06 07:59:54

标签: angular typescript rxjs rxjs5 angular2-observables

我有一个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);

    });

  }

}

这是我感到困惑的地方。当我删除第二个和第三个导入(ofmap)时,Observable的运算符仍可正常工作!

我的印象是使用import 'rxjs/add/operator/*';只会添加我需要的运算符,并跳过导入其余的运算符。但是,我可以看到所有运算符(static和instance)都是Observable类的成员,并通过第一个import语句导入。

我的问题是:

  1. 如何才能正确导入我需要的部分并排除其余部分?
  2. 如果所有运算符都已经是Observable类的成员,那么使用import 'rxjs/add/operator/*';有什么意义呢?

1 个答案:

答案 0 :(得分:2)

您也可以在其他地方导入地图,而不仅仅是在您的组件中。尽量不要导入异国情调,例如bufferToggle。它会抛出错误。地图是全部导入和修补的,甚至可能来自Angular本身。

因此,导入特定运算符仍然有意义。 import *会很糟糕,但只导入map可以减少你的包大小。