版权声明:本文为博主原创文章,未经博主允许不得转载.ttps://blog.csdn.net/qq_34414916/article/details/85164742
本篇博客主要介绍一下Angular模块是什么、有什么用、我们应该如何使用Angular模块,以及其与ts模块的区别等等一些知识点
心法篇
详细教程篇
1、Angular模块的元数据对象
Angular怎么知道这是一个NgModule,总得有一个标识吧!这个标识就是@NgModule装饰器,@NgModule接受一个元数据对象作为参数,它用来描述一个Angular模块(Angular组件、指令、服务等都有自己的元数据对象!),下面我们来看一下这个元数据对象
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @NgModule({ imports: [ BrowserModule ], providers: [ Logger ], declarations: [ AppComponent ], exports: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { }
其中@NgModule()函数是装饰器,Angular会把紧挨着@NgModule装饰器的那个类解析成Angular模块类,@NgModule()函数中的参数就是元数据对象,
根模块和普通模块的区别就在于这个bootstrap,因为,boostrap只应该出现在根模块中
2、模块的创建
在Angular中,你可以使用Angular CLI快速创建一个模块
ng generate module 模块名
例如,我要创建一个名叫hero的模块
ng generate module hero
需要Angular项目中运行该命令,Angular会在src/app目录下创建一个名叫hero的文件夹,里面有一个名叫hero.module.ts的文件(也就是模块名.module.ts),内容如下
import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; @NgModule({ declarations: [], imports: [ CommonModule ] }) export class HeroModule { }
这个文件中包含Angular模块的基本原型:@NgModule装饰器以及紧随其后的一个类(有了@NgModule装饰器后,就可以叫它模块类,否则,它只是普通的ts类)
3、Angular模块中的组件、服务、指令、管道
4、Angular模块 VS ts模块
简单的说:Angular模块是一个内聚的代码块,它为其中的指令、组件、服务等提供上下文的编译环境,而ts模块则完全不同,在ts中,一个文件就可以看成一个模块,我们可以使用import来使用别的ts模块export的类、属性等,现在,我们看到下面这段代码:
/* JavaScript imports */ import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms'; import { HttpClientModule } from '@angular/common/http'; import { AppComponent } from './app.component'; /* the AppModule class with the @NgModule decorator */ @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, FormsModule, HttpClientModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
所以,Angular模块和ts模块是不同的两个概念,但是它们相辅相成,共同为砸门的应用服务
问题篇:
上面说了,NgModule元数据对象的属性exports表示那些可供外部模块使用可声明对象,那么问题来了:我们应该将什么样的可声明对象写在这个exports数组中呢?或者说,我们如何判断该组件是需要写在exports中的?(答案可不是:我们应该将供外部模块使用的可声明对象写在这个exports数组中,这答案对实际应用毫无帮助!)
更新中。。。