首页 文章

使用Angular和rxjs导入ES6模块

提问于
浏览
0

我不太了解ES6模块,特别是涉及带副作用的导入时 .

例如,在Angular项目中,我使用Rxjs库来使用observable . 我需要使用ES6导入从该库导入函数和对象 .

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';

//later in the code I'm using these imports like this in a method
return Obserable.of(....);

我的问题是导入:从'rxjs / Observable'导入;似乎可以理解:我正在从node_modules中的'rxjs / Obserable'导入Observable对象 .

我的问题是导入'rxjs / add / observable / of';为什么不像'rxjs / ....'那样导入;

我读过import'...'不会导出任何对象或函数 . 它究竟做了什么?如果您不是出口'of'运营商,您如何使用它?何时使用import * / import {}或直接导入'...';

谢谢

1 回答

  • 1

    这实际上是导入运营商的老方法 .

    import 'rxjs/add/observable/of'; 实际上是原型方法 ofObservable . 导入时,每个Observable对象都有 of 方法可用 . 这就是为什么你应该把这些导入行放在像 app.module 这样的根文件中 . 但是,正如我在开始时告诉你的那样,这是旧的方式 .

    随着RxJs 5.5,可管道运营商开始发挥作用 . 您可以而且应该按如下方式导入运算符/可观察量

    import { of } from 'rxjs/observable/of';
    
    const myObs = of('some value');
    

    通过这种方式,操作员和可观察者变得树木可动 . Webpack不会将未使用的运算符放入输出包中 .

    Update

    假设您正在使用大量运算符,并在全局文件中添加了静态导入 . 过了一会儿,你重构了代码,你不再使用 Observable.of . 但是,假设您忘记了已经在全局文件中导入了该文件 . 即使你不再使用 of ,你仍然会在输出包中获得 of observable的代码 . 原型设计使您无法对代码进行树形摇动 . 我建议你看this . Ben Lesh解释了可管道运营商和RxJs6 .

相关问题