手记

模块

模块的意义

Angular 中的模块称作 NgModule。
一个模块可以看作是一个容器,用于把某一部分的特性代码组织起来,比如组件,服务,指令等,形成一个大的应用单元。
除此之外,模块还可以导入一些由其它模块中导出的功能,同时自身也可以导出一些指定的功能供其它模块使用。
本质上,模块是一个带有 @NgModule 装饰器的类。

模块的结构

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { APIService } from 'src/app/common/service/api.service';
import { AppComponent } from './app.component';

@NgModule({
  // 用于导入本模块中的组件所需的其它模块
  imports: [ BrowserModule ],

  // 用于向本模块提供服务,这些服务可以在本模块中的任何地方使用
  providers: [ APIService ],

  // 用于声明本模块下的组件、指令、管道
  // 每个组件都必须且只能声明在一个模块中,才可以正常使用
  declarations: [ AppComponent ],

  // 用于导出一些指定的组件、指令、管道,以供其它模块使用
  exports: [ AppComponent ],

  // 只有根模块才可以设置 bootstrap 属性
  // 用于将根组件(入口组件)加载到 index.html 主视图页面中
  bootstrap?: [ AppComponent ]
})

export class AppModule { }

模块的类型

在 Angular 中,根据功能的不同,将模块分为根模块和特性模块。

根模块

根模块是整个 Angular 应用的基础和核心,用于将所有特性模块组织起来,并接收一些全局的配置项。
根模块在结构上比其他特性模块多了一个 bootstrap 属性,用于声明应用的入口组件。
新建的 Angular 应用,都会存在一个根模块,默认名是 AppModule。

特性模块

根据功能的不同,开发者自行创建的模块统称为特性模块。

截图是为登录功能单独创建的特性模块:

共享模块

在模块的定义中提到了,我们也可以导出一些指定的功能(模块、组件、指令、管道),任何导入该模块的其他模块,就都可以访问到这些功能。

项目截图:

例子:

welcome.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { WelcomeComponent } from './welcome.component';

@NgModule({
  imports: [
    CommonModule
  ],
  declarations: [WelcomeComponent],

  // 在 WelcomeModule 模块中导出 WelcomeComponent 组件
  exports: [WelcomeComponent]
})
export class WelcomeModule { }

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

// 在 AppModule 模块中导出 WelcomeModule 模块
// 如此,AppModule 模块下的组件就可以直接使用 WelcomeModule 模块中导出的功能了
import { WelcomeModule } from './common/welcome/welcome.module';

@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    WelcomeModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

app.component.html

<!-- 使用 WelcomeModule 模块中导出的组件 -->
<app-welcome></app-welcome>

在实际开发中,我们通常会将公用的指令、管道和组件(不包括服务)放到一个模块中,然后其他模块只需要导入这个模块就可以使用这些功能,这类模块被称为共享模块,共享模块是特性模块的一个类型。


end

0人推荐
随时随地看视频
慕课网APP