我始终知道分别导入Observable
运算符以限制加载时间。但是我今天注意到了一些事情,希望有人可以向我解释。
我在Webpack中使用IntelliJ / WebStorm。
让我们在ngOnInit
的一个页面上说我有一个http电话:
ngOnInit() {
this.http.get('https//:google.com').map(e => e);
}
如果我没有导入地图运算符,编译器会抱怨,所以我这样导入:
import 'rxjs/add/operator/map';
世界上一切都很好。直到我需要使用Observable。所以,我会添加一个。
ngOnInit() {
let test = Observable.create(subscriber => {
return null;
});
this.http.get('https//:google.com').map(e => e);
}
现在编译器可以理解地抱怨它找不到Observable,所以我让IntelliJ / WebStorm为我导入它并将其添加到我的文件顶部:
import {Observable} from 'rxjs';
一切都好了。但是,这个新的导入似乎使地图导入无关紧要。我的意思是,如果我删除了地图导入并且只留下了Observable,那么所有编译都很好......
但是,如果我指定像这样导入Observable:
import {Observable} from 'rxjs/Observable';
然后我必须为地图操作员重新添加导入...
我导入我的Observable时是否导入了所有RxJS?
import {Observable} from 'rxjs';
如果是这样,我如何告诉IntelliJ不要这样做并仅导入类?
答案 0 :(得分:13)
为什么没有一个带有所需rxjs可观察类扩展和运算符的文件(例如:rxjs-extensions.ts)?
// Observable class extensions
import 'rxjs/add/observable/throw';
// Observable operators
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/filter';
import 'rxjs/add/operator/map';
然后在您的主模块(ex app.module.ts)中导入此文件:
import './rxjs-extensions';
在您的主要组件(例如:app.component.ts)中,只需导入Observavle:
import { Observable } from 'rxjs/Rx';
这是主角度教程中的内容。
答案 1 :(得分:1)
从WebStorm 2016.3(我相信)开始,您可以选择将某些导入列入黑名单。 Editor > Code Style > StypeScript
Do not import exactly from: [rxjs]
此外,tslint中还有一个标志可用于禁止全局导入:
{
"rules": {
"import-blacklist": [true, "rxjs"]
}
}
答案 2 :(得分:-1)
您可以使用以下所有操作符:
import * as Rx from "rxjs/Rx";
Rx.Observable.of(1,2,3,4,5);