成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

深入了解Angular中的NgModule(模塊)

NgModule 模塊是Angular中一個(gè)重要的點(diǎn),因?yàn)锳ngular的基本構(gòu)造塊就是NgModule。本篇文章就來(lái)帶大家了解一下Angular中的NgModule模塊,希望對(duì)大家有所幫助!

深入了解Angular中的NgModule(模塊)

前端(vue)入門到精通課程:進(jìn)入學(xué)習(xí)

NgModule 會(huì)把相關(guān)的代碼收集到一些功能集中,形成功能單元。在使用Angular CL 命令新建一個(gè)項(xiàng)目的時(shí)候,會(huì)給我們生成一個(gè)根模塊,命名為 AppModule,根模塊有一個(gè)根組件AppComponent,引導(dǎo)這個(gè)根模塊就可以啟動(dòng)應(yīng)用。Angular 應(yīng)用是模塊化的,我們?cè)陂_(kāi)發(fā)中會(huì)根據(jù)其功能 作用 以及其特性,建立大大小小各種模塊,從而構(gòu)建其成為一個(gè)應(yīng)用程序,任何模塊都能包含任意數(shù)量的其它組件。【相關(guān)教程推薦:《angularjs視頻教程》】

1.@NgModule()

import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core';  import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component';  @NgModule({   declarations: [     AppComponent   ],   imports: [     BrowserModule,     AppRoutingModule   ],   providers: [],   bootstrap: [AppComponent] }) export class AppModule { }

由⬆️代碼我們可以看到,NgModule 是一個(gè)帶有 @NgModule() 裝飾器的類,它接受一個(gè)元數(shù)據(jù)對(duì)象,該對(duì)象的屬性用來(lái)描述這個(gè)模塊。

點(diǎn)進(jìn)去@NgModule() 裝飾器的類我們可以看到他有如下屬性以及官方的對(duì)其屬性的解釋。

export declare interface NgModule {     providers?: Provider[];// 本模塊向全局服務(wù)中貢獻(xiàn)的那些服務(wù)的創(chuàng)建器。 這些服務(wù)能被本應(yīng)用中的任何部分使用。(你也可以在組件級(jí)別指定服務(wù)提供商,這通常是首選方式。)     declarations?: Array<Type<any> | any[]>;// 那些屬于本 NgModule 的組件、指令、管道     imports?: Array<Type<any> | ModuleWithProviders<{}> | any[]>;// 那些導(dǎo)出了本模塊中的組件模板所需的類的其它模塊     exports?: Array<Type<any> | any[]>;//那些能在其它模塊的組件模板中使用的可聲明對(duì)象的子集     entryComponents?: Array<Type<any> | any[]>;     bootstrap?: Array<Type<any> | any[]>;     schemas?: Array<SchemaMetadata | any[]>; }

以下是本人使用Angular后對(duì)此元數(shù)據(jù)屬性個(gè)人口語(yǔ)化的理解

  • providers:將本模塊所有在組件中注入的服務(wù),在這里提前定義好,否則在此模塊中使用這個(gè)服務(wù)會(huì)有錯(cuò)誤提示。

  • declaration:declaration 英文意思為聲明。在這里聲明一些模塊中要使用到的一些組件,指令,管道等。

  • imports:導(dǎo)入一些模塊,比如說(shuō)我把所有的指令構(gòu)成一個(gè)模塊 我使用其中某些指令的時(shí)候,我可以選擇導(dǎo)入整個(gè)指令模塊。也可以導(dǎo)入一些通過(guò)npm install 安裝的一些模塊導(dǎo)入其中,才可以使用。

  • exports:導(dǎo)出組件or指令管道等,以供引用此模塊的模塊可以使用此模塊的組件or 指令管道等。

  • exporyComponents:entry component 表示 angular 的入口組件,可以引導(dǎo)組件是一個(gè)入口組件,Angular 會(huì)在引導(dǎo)過(guò)程中把它加載到 DOM 中。 其它入口組件是在其它時(shí)機(jī)動(dòng)態(tài)加載的。字面上的意義,但是啥時(shí)候用呢,比如,我要彈出一個(gè)組件,那么這個(gè)組件是要?jiǎng)討B(tài)加載到DOM中了吧,這個(gè)時(shí)候就需要將這個(gè)組件xxxComponent寫上了。

  • bootstrap:這個(gè)模塊啟動(dòng)的時(shí)候應(yīng)該啟動(dòng)的組件,上面代碼可以看到AppModule是作為根模塊的啟動(dòng)組件。

  • schemas:不屬于Angular的組件或者指令的元素或者屬性都需要在這里進(jìn)行聲明。

2.JavaScript 模塊 與 NgModule

JavaScript 和 Angular 都使用模塊來(lái)組織代碼,雖然它們的組織形式不同,但 Angular 的應(yīng)用會(huì)同時(shí)依賴兩者。

JavaScript 模塊

模塊是內(nèi)含 JavaScript 代碼的獨(dú)立文件。要讓其中的東西可用,要寫一個(gè)導(dǎo)出語(yǔ)句

例:

export class AppComponent { ... }

在其他文件中需要使用

import { AppComponent } from './app.component';

而NgModulem模塊我們?cè)陔S筆的開(kāi)頭以及介紹他的元數(shù)據(jù),對(duì)其有一定的了解了。

NgModule 類 與 JavaScript 模塊有下列關(guān)鍵性的不同:

  • 1.NgModule 只綁定了可聲明的類,這些可聲明的類只是供 Angular 編譯器用的。

  • 2.NgModule 與 JavaScript 類把它所有的成員類都放在一個(gè)巨型文件中不同,只要把該模塊的類列在它的 @NgModule.declarations 列表中。

  • 3.NgModule 只能導(dǎo)出可聲明的類。這可能是它自己擁有的也可能是從其它模塊中導(dǎo)入的。它不會(huì)聲明或?qū)С鋈魏纹渌愋偷念悺?/p>

  • 4.與 JavaScript 模塊不同,NgModule 可以通過(guò)把服務(wù)提供商加到 @NgModule.providers 列表中,來(lái)用服務(wù)擴(kuò)展整個(gè)應(yīng)用。

相比之下我們可以看出,NgModulem模塊更靈活,擴(kuò)展性強(qiáng),更具優(yōu)勢(shì)。

3.常用模塊

首先要知道跑起來(lái)一個(gè)項(xiàng)目需要引用什么基本的模塊,以下是Angular 提供的一些官方的模塊。

NgModule

導(dǎo)入自

為何使用

BrowserModule

@angular/platform-browser

當(dāng)你想要在瀏覽器中運(yùn)行應(yīng)用時(shí)

CommonModule

@angular/common

當(dāng)你想要使用 NgIfNgFor 時(shí)

FormsModule

@angular/forms

當(dāng)要構(gòu)建模板驅(qū)動(dòng)表單時(shí)(它包含 NgModel

ReactiveFormsModule

@angular/forms

當(dāng)要構(gòu)建響應(yīng)式表單時(shí)

RouterModule @angular/router

要使用路由功能,并且你要用到 RouterLink,.forRoot().forChild() 時(shí)

HttpClientModule

@angular/common/http

當(dāng)你要和服務(wù)器對(duì)話時(shí)

4.特性模塊的分類

官方文檔將模塊分為五大類。

  • 領(lǐng)域特性模塊
  • 帶路由的特性模塊
  • 路由模塊
  • 服務(wù)特性模塊
  • 可視部件特性模塊

雖然我特么當(dāng)年根本不知道,但是在開(kāi)發(fā)中慢慢摸索其實(shí)發(fā)現(xiàn)也是根據(jù)模塊的特性將模塊的分類,結(jié)果不經(jīng)相同。

以下為個(gè)人在開(kāi)發(fā)中對(duì)功能模塊的劃分

1).業(yè)務(wù)型模塊:整一個(gè)應(yīng)用程序,根據(jù)其業(yè)務(wù)功能我們可以將程序拆分為一個(gè)個(gè)模塊,有很明確的業(yè)務(wù)特性,圍繞其業(yè)務(wù)功能的模塊。例如:用戶模塊,訂單模塊等。它有自己獨(dú)立的路由,有提供與此模塊的服務(wù),有一個(gè)or多個(gè)組件,它惰性懶加載,不會(huì)導(dǎo)出or提供任何組件or指令管道,引用官方、本應(yīng)用程序or第三方的功能模塊。它有明確的業(yè)務(wù)特性,不與別的模塊有耦合性。

2).組件模塊:應(yīng)用程序中通常都有規(guī)范化的標(biāo)準(zhǔn)設(shè)計(jì) ,比如說(shuō)統(tǒng)一的table,card date 等。將這些都抽出來(lái),做成一個(gè)個(gè)組件,在模塊中導(dǎo)出此組件以供其他模塊使用,這樣減少了應(yīng)用程序中重復(fù)的樣式代碼等。曾經(jīng)我是將所有這種可能多處要使用的封裝為組件后,統(tǒng)一在一個(gè)模塊中導(dǎo)出,后來(lái)演變?yōu)槊恳粋€(gè)組件都拆分為一個(gè)模塊。這樣也是發(fā)現(xiàn)如果這種通用性的組件多起來(lái)的話,假設(shè)有二三十個(gè)組件在這個(gè)UIComponent模塊中,而我因?yàn)橐褂闷渲幸粌蓚€(gè)組件而導(dǎo)入這個(gè)模塊,性能是很差的,所以后來(lái)都將組件拆分為一個(gè)個(gè)模塊以供業(yè)務(wù)模塊使用,例:DateModule,InputModule..等。

3).服務(wù)模塊:提供一些通用型的服務(wù)。比如說(shuō)http服務(wù)對(duì)httpClient二次包裝適用于項(xiàng)目,文件服務(wù),配置服務(wù)等。

4).其他模塊:應(yīng)用程序中我們會(huì)根據(jù)需要會(huì)做一些指令管道等,其就形成一個(gè)指令模塊包含應(yīng)用程序中所有等指令,管道模塊包含應(yīng)用程序中的所有管道。后來(lái)覺(jué)得,其實(shí)這些指令管道不需要集中起來(lái)統(tǒng)一導(dǎo)出引用。因?yàn)橐粋€(gè)模塊并不會(huì)引用到指令模塊中超過(guò)百分之八十的指令,so 只需要把它們集中到一個(gè)pipe文件夾下,哪個(gè)模塊需要用到具體個(gè)指令or管道,直接聲明在其模塊中使用便可。

5.創(chuàng)建,導(dǎo)入特性模塊

我們將系統(tǒng)根據(jù)其功能 業(yè)務(wù)劃分好模塊,有利于合作開(kāi)發(fā),代碼的維護(hù)和使用。

創(chuàng)建特性模塊

ng g m order
ng g c order/list  // 訂單模塊下新建一個(gè)list 組件

我們看最后cli給我們生成的目錄結(jié)構(gòu)

深入了解Angular中的NgModule(模塊)

order.module.ts

import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { ListComponent } from './list/list.component';  @NgModule({   declarations: [ListComponent],//定義list組件   exports: [ListComponent],//導(dǎo)出list組件   imports: [     CommonModule   ] }) export class OrderModule { }

list.component.ts

import { Component, OnInit } from '@angular/core';  @Component({   selector: 'app-list',   templateUrl: './list.component.html',   styleUrls: ['./list.component.scss'] }) export class ListComponent implements OnInit {    constructor() { }    ngOnInit() {   }  }

導(dǎo)入使用特性模塊

現(xiàn)在我們導(dǎo)入根模塊

app.module.ts

import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core';  import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; import { OrderModule } from './order/order.module';  @NgModule({   declarations: [     AppComponent   ],   imports: [     BrowserModule,     AppRoutingModule,     OrderModule //將order模塊導(dǎo)入   ],   providers: [],   bootstrap: [AppComponent] }) export class AppModule { }

app.component.html 在跟模塊使用

<!--The content below is only a placeholder and can be replaced.--> <div style="text-align:center">   <h1>     Welcome to {{ title }}!   </h1> </div>  <app-list></app-list> <router-outlet></router-outlet>

我們可以看到渲染了order模塊的list組件

深入了解Angular中的NgModule(模塊)

6.惰性加載模塊

如果我們將所有的模塊都導(dǎo)入根模塊,那么應(yīng)用在初始化加載的時(shí)候就會(huì)非常慢。這時(shí)候我們應(yīng)該考慮使用惰性加載。根據(jù)需求加載相應(yīng)都模塊,減少應(yīng)用初始化包的大小以及減少加載的時(shí)間,提高用戶體驗(yàn)性。

惰性加載的模塊特點(diǎn)是該模塊擁有路由模塊。so 接著上面我們創(chuàng)建了一個(gè)訂單模塊 我們給訂單模塊加上路由。并再創(chuàng)建一個(gè)user.module以及user.module模塊下的list組件。

深入了解Angular中的NgModule(模塊)

order.module

import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common';  import { OrderRoutingModule } from './order-routing.module'; import { ListComponent } from './list/list.component';   @NgModule({   declarations: [ListComponent],   imports: [     CommonModule,     OrderRoutingModule   ] }) export class OrderModule { }

order-routing.module

import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router'; import { ListComponent } from './list/list.component';   const routes: Routes = [   {     path: 'list',     component: ListComponent   }, ];  @NgModule({   imports: [RouterModule.forChild(routes)],   exports: [RouterModule] }) export class OrderRoutingModule { }

user模塊如此類推

接下來(lái)配置路由

AppRoutingModule在頂級(jí)路由中配置

import { NgModule } from '@angular/core'; import { Routes, RouterModule } from '@angular/router';  const routes: Routes = [   {     path: 'orders',     loadChildren: './order/order.module#OrderModule'   },   {     path: 'orders',     loadChildren: './user/user.module#UserModule'   } ];  @NgModule({   imports: [RouterModule.forRoot(routes)],   exports: [RouterModule] }) export class AppRoutingModule { }

我們給app.component.html新增兩個(gè)button

<!--The content below is only a placeholder and can be replaced.--> <div style="text-align:center">   <h2>     Welcome to {{ title }}!   </h2> </div>   <button routerLink="/user/list">user</button> <button routerLink="/order/list">order</button>  <router-outlet></router-outlet>

效果圖

深入了解Angular中的NgModule(模塊)

惰性加載模塊有什么好處呢,在大型項(xiàng)目中往往有許多個(gè)模塊,而且大很大。如果一個(gè)模塊1m,如果我們?cè)跒g覽器輸入地址打開(kāi)這個(gè)應(yīng)用,瞬間要加載100m 是非常慢的,而且我們并非要是用到著這100個(gè)模塊。將系統(tǒng)業(yè)務(wù)拆分為各個(gè)模塊,劃分好界限。按需加載,我點(diǎn)擊了user 我加載user 模塊我出現(xiàn)user 列表,對(duì)user進(jìn)行操作。當(dāng)我需要使用時(shí)才加載極大的減少了頁(yè)面初始加載的時(shí)間以及減少了資源的消耗。

深入了解Angular中的NgModule(模塊)

7.共享模塊

共享模塊顧名思義,就是共享于所有的模塊中。首先得定義好這個(gè)模塊的具體功能特性,比如指令、管道和組件等分別封裝成一個(gè)個(gè)模塊,哪些業(yè)務(wù)模塊需要使用到其里面的功能變導(dǎo)入其模塊中便可。簡(jiǎn)單的比如,本系統(tǒng)的input 都是統(tǒng)一樣式的,我們可以制作一個(gè)input 模塊 然后在其他模塊直接導(dǎo)入使用。這極大的規(guī)范了系統(tǒng)的統(tǒng)一性和降低了以后的維護(hù)成本。

深入了解Angular中的NgModule(模塊)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
小婷又紧又嫩又窄又多水| 亚洲AV综合色区无码4区| 天天狠天天透天干天天怕∴| 铜铜铜铜铜铜铜铜好大好深黄| 无码精品A∨在线观看| 性欧美GAYSEⅩ| 亚洲熟妇久久精品| 自拍偷在线精品自拍偷无码专区| JAPANESE熟女熟妇| 丰满熟女一区二区三区蜜桃臀 | 日本熟妇HD人妻| 偷窥无罪之诱人犯罪| 亚洲国产一区二区三区亚瑟| 中文天堂在线WWW最新版官网| 把腿张开老子臊烂你| 国产极品美女高潮无套| 精品国精品国产自在久国产应用| 蜜桃AV秘 无码一区二区三区| 日本爆乳丰满熟妇XXXX| 午夜天堂一区人妻| 有人有在线观看的片吗WWW| 亚洲AV无码片一区二区三区| 野花日本大全免费观看10电影| 99久久夜色精品国产网站| 丰满饥渴老女人HD| 国语偷拍人妻露脸| 免费无码成人AV电影在线播放 | 蜜桃AV一区二区三区| 人人妻熟妇中年乱子伦A| 香港三级精品三级在线专区| 一二三四视频社区在线一中文| JAPAN丰满人妻VIDEOS| 国产精品美女久久久浪潮AV| 各种少妇正面着BBW撒尿视频| 寂寞骚妇被后入式爆草抓爆| 欧美老妇激情BBBWWBBW| 污污网站18禁在线永久免费观看 | 亚洲AV永久无码精品秋霞电影秋 | 亚洲午夜无码极品久久| JULIA无码中文字幕一区| 国产精品无码永久免费888| 久久天天躁狠狠躁夜夜AV不卡 | 免费无码高潮喷水AⅤ片在线| 少妇人妻系列1~100| 亚洲一区二区自偷自拍另类| 成人国成人国产SUV| 精品亚洲成A人无码成A在线观看| 日本19禁啪啪吃奶大尺度| 亚洲AV无码成人精品区国产| 97大学生情侣真实露脸在线| 国产女人喷潮视频免费| 欧美XXXXX高潮喷水| 无码一区二区三区免费| 最新系列国产专区|亚洲国产| 国产精品亚洲色婷婷99久久精品| 麻豆XXXXXX在线观看| 无码人妻精品中文字幕| 99久久久无码国产精品秋霞网| 国产亚洲精品精华液好用吗| 强被迫伦姧在线观看无码| 亚洲精品天堂成人片AV在线播放| 被添出水全过程免费视频| 精品国产福利一区二区| 色噜噜狠狠一区二区三区| 在线精品动漫一区二区无码| 国产麻豆精品一区| 人妻少妇aB又紧又爽精品视频 | 久久婷婷国产综合精品| 无码成人精品区在线观看| 88久久精品无码一区二区毛片 | 亚洲国产精品VA在线看黑人| 大肉大捧一进一出的视频| 麻豆AV字幕无码中文| 亚洲AV无码成人精品区天堂| 大香伊蕉在人线国产最新2005| 麻花豆传媒剧国产MV在线 | 好儿子你插得太深了| 肉感饱满中年熟妇日本| 最新国产AⅤ精品无码| 记忆女神的女儿们| 我的妺妺H伦浴室无码视频| YYYY11111少妇无码影院| 久青草无码视频在线观看 | 黑料传送门TTTZZZ07DU| 日韩一区二区无码视频| 越南少妇BBV叉叉叉| 饥渴老熟妇乱子在线播放| 熟妇高潮精品一区二区三区| HUGEBOOBS熟妇大波霸| 久久久久亚洲AV无码专区| 午夜精品久久久久久99热| 成人免费A级毛片免费| 欧美FREESEX呦交| 一二三四影视在线看片免费| 果冻传媒亚洲区二期| 四十路の五十路熟女豊満AV| 锕锕锕锕锕锕锕轻点好痛免费 | 久久99精品久久久久久9| 无码免费大香伊蕉在人线国产 | 人妻免费一区二区三区最新| 在线成人A毛片免费播放| 久久国产热精品波多野结衣AV| 亚洲AV无码AV男人的天堂| 国产成人亚洲精品无码综合原创 | 乱妇乱女熟妇熟女网站| 亚洲欧美一区二区三区| 国精产品一二三四区产品| 无码任你躁久久久久久老妇| 隔着肚兜偷揉酥乳含乳子| 日日摸日日碰人妻无码老牲| A级国产乱理伦片在线播放| 免费无遮挡又黄又爽网站| 亚洲最大av在线| 久久99精品久久久久久| 亚洲成AV人片无码BT种子下载| 国产精品亚洲日韩欧美色窝窝色欲| 视频一区欧美日韩| 成人午夜亚洲精品无码区| 日产乱码一二三区别免费下| W永久939W乳液| 欧美日韩国产码高清综合人成 | 亚洲精品无码久久久久| 皇上太长了撞到点了| 亚洲国产成人综合在线不卡| 幻女BBWXXXX非洲黑人| 亚洲精品乱码久久久久久蜜桃图片| 护士爽到疯狂潮喷好爽| 亚洲AV综合色区无码二区爱AV| 国产精品亚洲日韩欧美色窝窝色欲 | 国产乱沈阳女人高潮乱叫老 | 人妻熟妇乱又伦精品视频APP| 爆乳JK美女脱内衣裸体网站| 人妻三级日本香港三级极| 不卡AV一区二区| 色噜噜国产精品视频一区二区| 丁香花在线视频完整版| 特级欧美ZOOXX| 国产美女丝袜一级肛交蜜桃| 无码精品人成人片在线观看| 国产精品久久国产三级国| 无遮挡亲胸捏胸免费视频| 国产无遮挡18禁网站免费| 亚洲国产精久久久久久久蜜桃| 精品国产成人一区二区| 一区适合晚上一个人看B站| 美女扒开腿让男人桶爽揉| 50岁人妻丰满熟妇ΑV无码区| 欧美最猛黑人XXXⅩ猛男欧视频| 成人国产精品一区二区网站公司| 日韩久久无码免费毛片软件| 抖音无限次短视频老司机| 乌克兰性猛交ⅩXXX乱大交| 国产新婚夫妇叫床声不断| 亚洲国产精品一区二区制服| 久久人妻AV一区二区软件| 最新高清无码专区| 日本XXXX裸体XXXX在线| 国产成人综合色在线观看网站| 亚洲AV无码成人影院一尤物区 | 欧美人与动牲交A免费| 51久久精品人人搡人人玩| 人人妻人人爽人人澡人人| 成年免费手机毛片免费看无码| 日本入室强伦姧BD在线观看| 国产96在线 | 亚洲| 亚洲AV无码成人网站WWW| 巨熟乳波霸若妻在线播放| CHINSEFUCKGAY无套| 色妞AV永久一区二区国产AV开| 国产一起色一起爱| 亚洲午夜精品一区二区| 男孩子都会夹住女孩子头发| 北条麻妃在线一区二区| 无码人妻久久一区二区三区免费丨| 精品久久久久香蕉网| 97夜夜澡人人爽人人| 熟女少妇a性色生活片毛片| 狠狠躁日日躁夜夜躁2022麻豆| 中国东北熟女老太婆内谢| 日本高清WWW色视频| 国产思思99RE99在线观看| 又嫩又紧欧美12P| 日日噜噜夜夜狠狠视频免费| 饥渴人妻被快递员玩弄的视频| 91久人人做人人妻人人玩精品| 天天摸夜夜摸夜夜狠狠摸| 久久人搡人人玩人妻精品| 成人AV鲁丝片一区二区免费| 亚洲AV无码国产精品色午友在线| 免费人成视网站在线不卡| 亚洲AⅤ无码一区二区三区| 老外免费CSGO交易网站有哪些| 爆乳邻居肉欲中文字幕| 亚欧洲乱码视频一二三区| 免费中国大但人文艺术在线观看| 俄罗斯卖CSGO的网站| 亚洲综合小说另类图片五月天 | FREE乌克兰嫩交HD| 特黄AAAAAAAAA毛片免费视频| 精品久久亚洲中文无码|