[英]Angular recognize imports from root?
我有一个使用Inject / Injectable的简单服务:
import {Inject, Injectable} from '@angular/core';
import {APP_CONFIG} from '../../config/app-config.module';
import {AppConfig} from '../models/core/app-config.model';
@Injectable()
export class AuthService {
constructor(@Inject(APP_CONFIG) private config:AppConfig) {
}
}
这里没什么新东西,但是我们知道 - 我必须导入Inject, Injectable
。
即使我在根模块中导入Inject, Injectable
- 仍然我必须在文件中导入它们。
好。
但是现在我面临的情况(代码不是我的)开发人员在根文件夹中导入了一些RXJS操作符:
rxjs-imports.ts
import 'rxjs/add/operator/filter'
import 'rxjs/add/operator/do'
import 'rxjs/add/operator/map'
import 'rxjs/add/operator/catch'
import 'rxjs/add/operator/shareReplay'
import 'rxjs/add/operator/distinctUntilChanged'
import 'rxjs/add/operator/pluck'
然后他在app.module.ts
导入了该文件:
import './rxjs-imports';
现在他可以使用那些运算符而无需在另一个组件/服务中导入它们(!) :
import {Observable} from 'rxjs/Observable';
//no imports for operators
public get<T>(name: string) :Observable<T>{
return this.subj.pluck( "d"); <---- how does it knows pluck ?
}
题:
我不明白 - 它是怎么来的? 我原以为编译器会大喊大叫添加pluck
运算符
import 'rxjs/add/operator/xxx'
实际上修补了Observable
原型,并使用指定的运算符对其进行扩展,因此导入文件的结果是,从那时起,您可以在代码中的每个Observable
中使用这些运算符。
您可以在RxJS源代码中看到它是如何完成的,例如catch操作符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.