繁体   English   中英

Angular承认从root进口?

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM