Angular2學(xué)習(xí)筆記——詳解NgModule模塊
在Angular2中一個Module指的是使用@NgModule修飾的class。@NgModule利用一個元數(shù)據(jù)對象來告訴Angular如何去編譯和運(yùn)行代碼。一個模塊內(nèi)部可以包含組件、指令、管道,并且可以將它們的訪問權(quán)限聲明為公有,以使外部模塊的組件可以訪問和使用到它們。
模塊是用來組織應(yīng)用的,通過模塊機(jī)制外部類庫可以很方便的擴(kuò)展應(yīng)用,Rc5之后,Angular2將許多常用功能都分配到一個個的模塊中,如:FormModule、HttpModule、RouterModule。
NgModule的主要屬性如下:
- declarations:模塊內(nèi)部Components/Directives/Pipes的列表,聲明一下這個模塊內(nèi)部成員
- providers:指定應(yīng)用程序的根級別需要使用的service。(Angular2中沒有模塊級別的service,所有在NgModule中聲明的Provider都是注冊在根級別的Dependency Injector中)
- imports:導(dǎo)入其他module,其它module暴露的出的Components、Directives、Pipes等可以在本module的組件中被使用。比如導(dǎo)入CommonModule后就可以使用NgIf、NgFor等指令。
- exports:用來控制將哪些內(nèi)部成員暴露給外部使用。導(dǎo)入一個module并不意味著會自動導(dǎo)入這個module內(nèi)部導(dǎo)入的module所暴露出的公共成員。除非導(dǎo)入的這個module把它內(nèi)部導(dǎo)入的module寫到exports中。
- bootstrap:通常是app啟動的根組件,一般只有一個component。bootstrap中的組件會自動被放入到entryComponents中。
- entryCompoenents: 不會再模板中被引用到的組件。這個屬性一般情況下只有ng自己使用,一般是bootstrap組件或者路由組件,ng會自動把bootstrap、路由組件放入其中。 除非不通過路由動態(tài)將component加入到dom中,否則不會用到這個屬性。
每個Angular2的應(yīng)用都至少有一個模塊即跟模塊。
import {NgModule} from '@angular/core';
import {BrowserModule} from '@angular/platform-borwser';
import {AppComponent} from './AppComponent';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule],
bootstrap: [AppComponent]
})
export class AppModule{}
隨著程序的壯大,單一的根模塊已不能清晰的劃分職責(zé),這時(shí)候便可以引入Feature Module。Feature Module與根模塊的創(chuàng)建方式一樣,所有的模塊共享一個運(yùn)行期上下文和依賴注入器。
功能模塊與根模塊的職責(zé)區(qū)別主要有以下兩點(diǎn):
- 根模塊的目的在于啟動app,功能模塊的目的在于擴(kuò)展app
- 功能模塊可以根據(jù)需要暴露或隱藏具體的實(shí)現(xiàn)
Angular2提供的另一個與模塊有關(guān)的技術(shù)就是延遲加載了。默認(rèn)情況下Angular2將所有的代碼打包成一個文件,目的是為了提高應(yīng)用的流暢性,但是如果是運(yùn)行在mobile中的app,加載一個大文件可能會過慢,所以rc5提供了一種延遲加載方式。
template: ` <app-title [subtitle]="subtitle"></app-title> <nav> <a routerLink="contact" routerLinkActive="active">Contact</a> <a routerLink="crisis" routerLinkActive="active">Crisis Center</a> <a routerLink="heroes" routerLinkActive="active">Heroes</a> </nav> <router-outlet></router-outlet> `
import { ModuleWithProviders } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
export const routes: Routes = [
{ path: '', redirectTo: 'contact', pathMatch: 'full'},
{ path: 'crisis', loadChildren: 'app/crisis/crisis.module#CrisisModule' },
{ path: 'heroes', loadChildren: 'app/hero/hero.module#HeroModule' }
];
export const routing: ModuleWithProviders = RouterModule.forRoot(routes);
其中,path指明路徑,loadChildren指明使用延遲加載,'app/crisis/crisis.module#CrisisModule'指明了模塊的路徑,和模塊的名稱。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
AngularJS入門教程之學(xué)習(xí)環(huán)境搭建
這篇文章主要介紹了AngularJS入門教程之學(xué)習(xí)環(huán)境搭建,本教程將指導(dǎo)您完成一個簡單的應(yīng)用程序創(chuàng)建過程,包括編寫和運(yùn)行單元測試、不斷地測試應(yīng)用,需要的朋友可以參考下2014-12-12
Angular使用 ng-img-max 調(diào)整瀏覽器中的圖片的示例代碼
本篇文章主要介紹了Angular使用 ng-img-max 調(diào)整瀏覽器中的圖片的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Angular4項(xiàng)目中添加i18n國際化插件ngx-translate的步驟詳解
這篇文章主要跟大家介紹了關(guān)于Angular4項(xiàng)目中添加i18n國際化插件ngx-translate的步驟,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-07-07
詳解angularjs實(shí)現(xiàn)echart圖表效果最簡潔教程
本篇文章主要介紹了詳解angularjs實(shí)現(xiàn)echart圖表效果最簡潔教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
自學(xué)實(shí)現(xiàn)angularjs依賴注入
這篇文章主要為大家詳細(xì)介紹了angularjs依賴注入的自己成果,如何實(shí)現(xiàn)angularjs依賴注入,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12

