为什么Angular文档建议在模块和组件级别上导入?

Don*_*ana 1 javascript import module typescript angular

反应形式文档中,建议我将以下行添加到我的app.module.ts中.

import { ReactiveFormsModule } from '@angular/forms';
...
@NgModule({ imports: [ ReactiveFormsModule, ... ], ... })
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

然后,在后面的部分中,建议还在我的actual.component.ts中添加以下内容.

import { FormControl, FormGroup } from '@angular/forms';
Run Code Online (Sandbox Code Playgroud)

我试图跳过模块部分,只导入组件中的东西,这似乎有效,据我所知.对我来说似乎是合理的,如果我做相反的事情并添加了模块部分,我就不必导入该模块的组件.这是模块部件和组件部分的组合让我感到困惑.

我不明白这两个操作的目的在一起.他们为什么这样做?

J. *_*rdo 5

在模块级别导入允许您将该模块声明为模块的依赖项,从而能够在模板中使用其提供程序,指令,管道和其他内容.

在组件级别导入允许您在打字稿代码中使用这些类.

进一步说明

在角度导入中,模块"合并"该模块,因此在编译模板时,它会将模板元素(组件,指令和管道)识别为角度元素.

在typescript和javascript中为了使用在另一个文件或模块中声明的代码(类,函数,常量),你需要导入它,在节点中你使用require()函数,在typescript中import from表达式.

因此,如果您查看代码,您将意识到您正在导入两个不同的东西,即模块和类,第一个是为了合并该模块而第二个是为了使用该类.

更新

在打字稿中,有可能有索引文件,通常用于导出元素,而不必深入到文件夹结构,'@ angular/forms'的文件导出以下(除其他外):

export {AbstractControl, AbstractControlOptions, FormArray, FormControl, FormGroup} from './model';
export * from './form_providers';
Run Code Online (Sandbox Code Playgroud)

form_providers声明FormsModule和的地方在哪里ReactiveFormsModule

因此,您可以从一个文件导入模块和类.