Angular开发疑问:为何无需在@NgModule的imports中导入NgModule?
嘿,这个问题问到点子上了!其实核心是要分清TypeScript导入语句和Angular模块的imports数组这俩完全不同的东西:
import { NgModule } from '@angular/core';的作用
这条语句只是告诉TypeScript:“我要在当前文件里使用NgModule这个装饰器函数,你帮我从@angular/core库里把它拿过来”。它本质是TypeScript的模块导入,目的是让我们能在代码里合法引用@NgModule这个符号——如果不写这条,你写@NgModule({...})的时候编辑器直接就会报错说找不到这个东西。@NgModule里的imports数组的作用
这个数组是Angular用来管理模块依赖的地方,你在这里放的是其他Angular模块类(比如BrowserModule、FormsModule)。这些模块里封装了可复用的功能:比如BrowserModule提供了浏览器运行Angular的基础环境和常用指令(*ngIf、*ngFor),FormsModule提供了表单相关的指令(ngModel)。把它们加到imports里,当前模块的所有组件才能使用这些功能。为什么NgModule不用加到imports里?
因为NgModule根本就不是一个Angular模块类!它是一个装饰器——用来标记某个普通的TypeScript类是一个Angular模块。它的作用是给类添加Angular模块的元数据,而不是提供可复用的组件/指令/服务。打个比方:你用胶带把东西粘在一起,胶带是工具,但你不需要把胶带本身当成被粘的物品之一对吧?NgModule就是那个“胶带”,只需要拿来用就行,不用放到依赖数组里。
总结一下:你导入NgModule是为了能定义模块,而imports数组是用来引入其他功能模块的,两者完全不是一回事~
内容的提问来源于stack exchange,提问作者0xsegfault

