最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Angular2  NgModule 模塊詳解

 更新時(shí)間:2016年10月19日 08:57:41   投稿:lqh  
這篇文章主要介紹了Angular2 NgModule 模塊詳解的相關(guān)資料,并附簡單實(shí)例,需要的朋友可以參考下

Angular的模塊的目的是用來組織app的邏輯結(jié)構(gòu)。

在ng中使用@NgModule修飾的class就被認(rèn)為是一個(gè)ng module。NgModule可以管理模塊內(nèi)部的Components、Directives、Pipes,引入Service,并控制外部組件對(duì)內(nèi)部成員的訪問權(quán)限。

angular2 具有了模塊的概念,響應(yīng)了后臺(tái)程序的號(hào)召,高內(nèi)聚 低耦合。模塊就是用來進(jìn)行封裝,進(jìn)行高內(nèi)聚  低耦合的功能。

其實(shí)各人認(rèn)為ng2 的模塊和.net的工程類似,如果要使用模塊中定義的功能,第一步就是必須要引用它,ng2 中叫import 導(dǎo)入。

那么我們看模塊是否有層級(jí)概念呢,至少目前來看,模塊都是平級(jí)的,沒有主子之分。

如何定義模塊呢?

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

/* App Root */
import { AppComponent } from './app.component';

/* Feature Modules */
import { ContactModule } from './contact/contact.module';
import { CoreModule } from './core/core.module';
import { routing } from './app.routing';
import { Title } from '@angular/platform-browser';
@NgModule({
 imports: [
  BrowserModule,
  ContactModule,
  /*
    CoreModule,
  */
  CoreModule.forRoot({ userName: 'Miss Marple' }),
  routing
 ],
 declarations: [AppComponent],//聲明當(dāng)前模塊需要的指定 組件信息
 exports:[],
 providers: [Title],
 bootstrap: [AppComponent]
})
export class AppModule { }

 簡單說明一下模塊元數(shù)據(jù)中各個(gè)參數(shù)的用途。

imports:導(dǎo)入其他模塊,就是要使用其他模塊的功能,必須要導(dǎo)入。

declarations:聲明,聲明本模塊包含的內(nèi)容??赡苡行┩瑢W(xué)會(huì)遇到,定義了一個(gè)指令,在component中使用卻總是沒有生效的問題,首先我們要檢查的就是是否進(jìn)行了聲明。

exports:外部可見的內(nèi)容。相當(dāng)于.net中聲明為public的那些類。

providers:服務(wù)提供者,主要用來定義服務(wù)。估計(jì)ng2框架會(huì)自動(dòng)將注冊的服務(wù)體檢到依賴注入實(shí)例中,目前測試也是如此。

bootstrap:啟動(dòng)模塊。只在根模塊使用。在除了根模塊以外的其他模塊不能使用。

2.問題2

目前官方叫法:啟動(dòng)模塊為根模塊,自定義的其他模塊叫特性模塊。

我們是否可以在特性模塊中import根模塊呢?

實(shí)驗(yàn)是檢驗(yàn)真理的最好方法。

import { NgModule }      from '@angular/core';
import { SharedModule }    from '../shared/shared.module';

import { ContactComponent }  from './contact.component';
import { ContactService }   from './contact.service';
import { routing }      from './contact.routing';
import{GuozhiqiModule}from '../directives/guozhiqi.module';
import{AppModule}from '../app.module';
@NgModule({
 imports:   [ SharedModule, routing,GuozhiqiModule,AppModule ],// 導(dǎo)入模塊
 declarations: [ ContactComponent ],//聲明 指令 
 providers:  [ ContactService ]//服務(wù)提供者 在當(dāng)前模塊提供者中注冊當(dāng)前模塊需要的服務(wù)
})
export class ContactModule { }

appModule是根模塊,我們定義的contactModule是特性模塊,現(xiàn)在我們通過imports 導(dǎo)入根模塊。

 執(zhí)行出現(xiàn)錯(cuò)誤,contactModule導(dǎo)入了一個(gè)undefined的module?

為什么會(huì)出現(xiàn)這個(gè)問題呢?

各人估計(jì)是因?yàn)?.導(dǎo)致了循環(huán)引用的問題。appModule會(huì)加載ContactModule,而在ContactModule中又要import 根模塊,導(dǎo)致循環(huán)引用,從而出現(xiàn)錯(cuò)誤。

2.另一種解釋就是根模塊不允許導(dǎo)入。ng2框架不允許這樣

問題3:如何避免出現(xiàn)循環(huán)引用呢?

官方給出了答案:https://angular.cn/docs/ts/latest/guide/ngmodule.html#!#prevent-reimport

constructor (@Optional() @SkipSelf() parentModule: CoreModule) {
  if (parentModule) {
   throw new Error(
    'CoreModule is already loaded. Import it in the AppModule only');
  }
 }

 但是我本地驗(yàn)證并不會(huì)有效的驗(yàn)證如何避免重復(fù)import一個(gè)模塊。

問題4. 模塊與路由的關(guān)系。

基本上每個(gè)特性模塊都有單獨(dú)的路由定義,關(guān)于模塊和路由的關(guān)系定義,下次說到ng2路由時(shí)再細(xì)說,因?yàn)閚g2的路由太強(qiáng)大,以至于需要很長時(shí)間的理解才能明白。

ng2模塊的目錄和目錄結(jié)構(gòu)的最佳實(shí)踐:

1.每個(gè)模塊一個(gè)單獨(dú)的文件夾

2.模塊是高內(nèi)聚 低耦合

3.模塊內(nèi)功能相關(guān)或相近

4.每個(gè)模塊都有單獨(dú)的路由定義 -不是必須

5.不要重復(fù)導(dǎo)入一些模塊,必要的時(shí)候加入限制。 因?yàn)橹貜?fù)導(dǎo)入可能會(huì)影響依賴注入實(shí)例

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論

敦化市| 栾川县| 广西| 阳新县| 越西县| 吴忠市| 惠来县| 莲花县| 新巴尔虎左旗| 乐业县| 永宁县| 昌黎县| 株洲市| 武平县| 镇康县| 文成县| 桂林市| 葫芦岛市| 河曲县| 芮城县| 淳安县| 新宁县| 呼图壁县| 临安市| 永安市| 杭锦后旗| 望城县| 沅陵县| 德安县| 日照市| 澎湖县| 耒阳市| 乌拉特中旗| 乐都县| 西畴县| 盐源县| 辽源市| 晋宁县| 哈尔滨市| 贡觉县| 博乐市|