亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解Angular的8個主要構造塊

2019-11-19 16:18:06
字體:
來源:轉載
供稿:網友

Angular 主要分為八大構造塊(也就是八個核心概念):模塊 (module)、組件 (component)、模板 (template)、元數據 (metadata)、數據綁定 (data binding)、指令 (directive)、服務 (service)、依賴注入 (dependency injection)。其中,最核心的一個概念就就組件。

1. 模塊 (module)

Angular 應用是模塊化的,并且 Angular 有自己的模塊系統,它被稱為 Angular 模塊或 NgModules。

每個Angular應用至少有一個模塊(根模塊),習慣上命名為AppModule。

根模塊在一些小型應用中可能是唯一的模塊,大多數應用會有很多特性模塊,每個模塊都是一個內聚的代碼塊專注于某個應用領域、工作流或緊密相關的功能。

Angular 模塊(無論是根模塊還是特性模塊)都是一個帶有@NgModule裝飾器的類。

下面是一個簡單的根模塊:

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

其中重要的屬性是:

  1. declarations - 聲明本模塊中擁有的視圖類。Angular 有三種視圖類:組件、指令、管道;
  2. exports - declarations 的子集,可用于其它模塊的組件;
  3. imports - 本模塊聲明的組件模板需要的類所在的其它模塊。用來導入其他自定義模塊,第三方插件模塊;
  4. providers - 服務的創建者,并加入到全局服務列表中,可用于應用任何部分;
  5. bootstrap - 指定應用的主視圖(稱為根組件),它是所有其它視圖的宿主。只有根模塊才能設置bootstrap屬性。通常在main.ts中引導AppModule,這樣platformBrowserDynamic().bootstrapModule(AppModule)

2. 組件 (component)

組件負責控制屏幕上的一小塊區域,我們稱之為視圖。

下面是一個組件的簡單例子:

// src/app/hero-list.component.tsexport class HeroListComponent implements OnInit { heroes: Hero[]; selectedHero: Hero; constructor(private service: HeroService) { } ngOnInit() {  this.heroes = this.service.getHeroes(); } selectHero(hero: Hero) { this.selectedHero = hero; }}

3. 模板 (template)

模板就是HTML文件,但是不是標準的HTML文件,它使用了一些模板語法,模板語法使模板有了自己的邏輯關系,并能夠實現和組件的簡單數據交互。

下面是一個簡單的模板:

// src/app/hero-list.component.html<h2>Hero List</h2><p><i>Pick a hero from the list</i></p><ul> <li *ngFor="let hero of heroes" (click)="selectHero(hero)">  {{hero.name}} </li></ul><hero-detail *ngIf="selectedHero" [hero]="selectedHero"></hero-detail>

通常使用ng g component my-comoponent命令產生一個組件包含四個文件:

my-comoponent.css      // 樣式文件my-comoponent.thml      // 模板my-comoponent.spec.ts    // 測試文件my-comoponent.ts      // 這是組件? 通常我們認為這四個文件組成一個組件

4. 元數據 (metadata)

元數據告訴你如何處理一個類。

其實,在Angular中每個組件只是一個類,但是我們可以通過裝飾器來附加元數據告訴Angular這是一個組件。

下面就是HeroListComponent的一些元數據。

// src/app/hero-list.component.ts (metadata)@Component({  // @Component 將后面的 HeroListComponent 類標記為一個組件 selector:  'hero-list', templateUrl: './hero-list.component.html', providers: [ HeroService ]})export class HeroListComponent implements OnInit {/* . . . */}

@Component裝飾器能接受一個配置對象, Angular 會基于這些信息創建和展示組件及其視圖。

@Component的配置項包括:

  1. selector: CSS選擇器,它告訴Angular在父級HTML中查找<hero-list>標簽,創建并插入該組件。 例如,如果應用的HTML 包含<hero-list></hero-list>, Angular就會把HeroListComponent的一個實例插入到這個標簽中;
  2. templateUrl:組件HTML 模板的模塊相對地址;
  3. providers - 組件所需服務的依賴注入提供商數組。 這是在告訴 Angular:該組件的構造函數需要一個HeroService服務,這樣組件就可以從服務中獲得英雄數據。

到這里你應該可以明白:模板、元數據和組件共同描繪出這個視圖。

5. 數據綁定 (databinding)

數據綁定是Angular中最常用的數據處理模式。數據綁定在模板與對應組件的交互中扮演了重要的角色,在父組件與子組件的通訊中也同樣重要。

下面是一個簡單的例子:

// src/app/hero-list.component.html <li>{{hero.name}}</li><hero-detail [hero]="selectedHero"></hero-detail><li (click)="selectHero(hero)"></li>
  1. {{hero.name}}插值表達式在<li>標簽中顯示組件的hero.name屬性的值;
  2. [hero]屬性綁定把父組件HeroListComponent的selectedHero的值傳到子組件HeroDetailComponent的hero屬性中;
  3. (click) 事件綁定在用戶點擊英雄的名字時調用組件的selectHero方法。

Angular默認沒有雙向綁定,但是,官方推薦這樣來實現雙向綁定:

<input [(ngModel)]="hero.name">

Angular 在每個 JavaScript 事件循環中處理所有的數據綁定,它會從組件樹的根部開始,遞歸處理全部子組件。

6. 指令 (directive)

由于Angular模板是動態的,所以你需要通過指令實現對DOM的轉換。(組件是一個帶模板的指令;@Component裝飾器實際上就是一個@Directive裝飾器,只是擴展了一些面向模板的特性。 )

指令分為兩種:結構指令、屬性指令。

a. 結構指令: 通過在 DOM 中添加、移除和替換元素來修改布局。

下面是一個簡單的內置結構指令的例子:

<!-- src/app/hero-list.component.html (structural) --><li *ngFor="let hero of heroes"></li><hero-detail *ngIf="selectedHero"></hero-detail>
  1. *ngFor告訴 Angular 為heroes列表中的每個英雄生成一個<li>標簽。
  2. *ngIf表示只有在選擇的英雄存在時,才會包含HeroDetail組件。

b. 屬性指令:修改一個現有元素的外觀或行為。

簡單例子:

<!-- src/app/hero-detail.component.html --><input [(ngModel)]="hero.name">

7. 服務 (service)

服務是一個廣義范疇,包括:值、函數,或應用所需的特性。幾乎任何東西都可以是一個服務。 典型的服務是一個類,具有專注的、明確的用途。它應該做一件特定的事情,并把它做好。

例如:

  1. 日志服務
  2. 數據服務
  3. 消息總線
  4. 稅款計算器
  5. 應用程序配置

組件類應保持精簡。組件本身不從服務器獲得數據、不進行驗證輸入,也不直接往控制臺寫日志。 它們把這些任務委托給服務。所以說服務是跑腿的,服務一般用來處理業務邏輯,被注入在組件當中,服務是全局單例的。也就是說注入到所有組件中的服務是同一個。

一個簡單的例子:

// src/app/hero.service.ts export class HeroService { private heroes: Hero[] = []; constructor(  private backend: BackendService,  private logger: Logger) { } getHeroes() {  this.backend.getAll(Hero).then( (heroes: Hero[]) => {   this.logger.log(`Fetched ${heroes.length} heroes.`);   this.heroes.push(...heroes); // fill cache  });  return this.heroes; }}

8. 依賴注入 (denpendency injection)

“依賴注入”是提供類的新實例的一種方式,還負責處理好類所需的全部依賴。大多數依賴都是服務。 Angular 使用依賴注入來提供新組件以及組件所需的服務。

來看注入方式:

// src/app/hero-list.component.tsconstructor(private service: HeroService) { }

注入器維護了一個服務實例的容器,存放著以前創建的實例。 如果所請求的服務實例不在容器中,注入器就會創建一個服務實例,并且添加到容器中,然后把這個服務返回給 Angular。 當所有請求的服務都被解析完并返回時,Angular 會以這些服務為參數去調用組件的構造函數。 這就是依賴注入 。

通常我們將服務聲明在根模塊,以便在整個應用中使用這個服務。

// src/app/app.module.tsproviders: [ BackendService, HeroService, Logger],

也可以在其他組件中聲明服務,那么這個服務只能用于當前組件。把它注冊在組件級表示該組件的每一個新實例都會有一個服務的新實例。

// src/app/hero-list.component.ts@Component({ selector:  'hero-list', templateUrl: './hero-list.component.html', providers: [ HeroService ]})

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品96久久久久久又黄又硬| 在线看日韩av| 亚洲风情亚aⅴ在线发布| 国产精品h片在线播放| 久久这里只有精品视频首页| 欧美日本啪啪无遮挡网站| 国产日本欧美视频| 国产精品美女www爽爽爽视频| 亚洲国产精品久久久久秋霞蜜臀| 97精品国产97久久久久久免费| 亚洲午夜激情免费视频| 中文字幕日韩专区| 欧美成人自拍视频| www.日韩欧美| 久久精品在线视频| 高清欧美性猛交xxxx黑人猛交| 国产成人极品视频| 久久久久久久国产精品视频| 精品色蜜蜜精品视频在线观看| 亚洲va久久久噜噜噜久久天堂| 国产成人一区二区三区小说| 韩国日本不卡在线| 日韩成人中文字幕在线观看| 欧美激情中文字幕乱码免费| 亚洲在线一区二区| 欧美性猛交xxxx乱大交极品| 国产精品三级美女白浆呻吟| 欧美视频在线观看免费网址| 国产自产女人91一区在线观看| 久久97精品久久久久久久不卡| 亚洲图片欧洲图片av| 久久精品国产欧美亚洲人人爽| 亚洲乱码国产乱码精品精天堂| 一区二区欧美久久| 欧美一区二区三区免费视| 69av视频在线播放| 日韩在线视频二区| 久久久国产精品亚洲一区| 日韩在线国产精品| 亚洲国产精品中文| 欧美日韩精品在线播放| 2019最新中文字幕| 最近2019中文字幕第三页视频| 91久久久久久久久久久| 久热精品视频在线免费观看| 亚洲欧美精品伊人久久| 日韩欧美黄色动漫| 成人精品久久av网站| 中文日韩电影网站| 国产精品吴梦梦| 亚洲男人第一网站| 欧美日韩成人精品| 欧美第一页在线| 亚洲毛片在线观看| 久久人人爽人人爽人人片亚洲| 久久九九国产精品怡红院| 国产精品三级在线| 国产精品入口日韩视频大尺度| 丝袜美腿精品国产二区| 日韩在线欧美在线| 国产精品xxxxx| 日韩av中文字幕在线播放| 97在线视频免费观看| 日韩视频永久免费观看| 伊人av综合网| 91免费看片网站| 成人欧美一区二区三区黑人| 日韩精品视频免费在线观看| 91久热免费在线视频| 欧美性生活大片免费观看网址| 少妇高潮久久77777| 欧美日产国产成人免费图片| 欧美色另类天堂2015| 精品中文视频在线| 国产日韩中文字幕| 国产精品亚洲网站| 久久精品视频网站| 国产精品99久久久久久久久| 91国在线精品国内播放| 黑人巨大精品欧美一区二区三区| 欧美日韩黄色大片| 一区二区欧美在线| 国产日韩欧美成人| 亚洲精品在线观看www| 国色天香2019中文字幕在线观看| 日韩电视剧在线观看免费网站| 国产一区二区三区直播精品电影| 欧美乱大交xxxxx| 日本欧美一二三区| 精品日韩美女的视频高清| 国产成人精品在线播放| 在线观看91久久久久久| 国产精品18久久久久久麻辣| 日韩电影网在线| 狠狠色狠色综合曰曰| 亚洲人成电影网站色xx| 一区二区三区视频免费| 精品视频—区二区三区免费| 国产69精品99久久久久久宅男| 91福利视频在线观看| 亚洲最大福利视频| 亚洲欧美在线免费观看| 国产亚洲欧美日韩精品| 中文字幕v亚洲ⅴv天堂| 91久久精品国产| 日韩成人在线观看| 国产aⅴ夜夜欢一区二区三区| 亚洲欧美激情精品一区二区| 久久视频免费在线播放| 久久色在线播放| 久久久国产影院| 国产精品视频色| 亚洲国产高清高潮精品美女| 国产精品视频男人的天堂| 日韩视频在线免费观看| 性欧美xxxx视频在线观看| 亚洲桃花岛网站| 亚洲人免费视频| 亚洲成人久久一区| 91精品在线国产| 91国产精品电影| 色哟哟入口国产精品| 久久在线视频在线| 亚洲裸体xxxx| 日本精品一区二区三区在线播放视频| 91精品久久久久久久久久| 久久精品中文字幕一区| 亚洲一区二区三区毛片| 97在线视频免费播放| 美女999久久久精品视频| 国产一区二区三区丝袜| 亚洲最新在线视频| 亚洲一二三在线| 欧美日韩在线免费观看| 美女精品视频一区| 久久99精品久久久久久琪琪| 欧美日韩精品国产| 日韩电影在线观看中文字幕| www日韩欧美| 国产精品v日韩精品| 国产一区二区美女视频| 国产精品视频最多的网站| 97精品一区二区视频在线观看| 日韩av影院在线观看| 国产精品爱久久久久久久| 日韩精品视频三区| 久久久久国产精品www| 亚洲欧美中文日韩在线| 91久久久久久久久久久| 日韩成人免费视频| 国产精品jvid在线观看蜜臀| 在线亚洲男人天堂| 久久视频在线观看免费| 国内外成人免费激情在线视频| 色视频www在线播放国产成人| 亚洲最新av在线网站| 欧美日韩国产丝袜美女| 91经典在线视频| 亚洲欧美日韩在线一区| 在线观看视频99| www.美女亚洲精品| 综合国产在线观看| 国产成人激情小视频| 性欧美视频videos6一9|