[英]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.