白話Angular詞匯

預(yù) (ahead-of-time, AoT) 編譯

在打包項(xiàng)目的時(shí)候提前編譯好應(yīng)用,打包好之后可以直接啟動(dòng),而不是把編譯器打包在應(yīng)用中用的時(shí)候再編譯。生產(chǎn)環(huán)境使用。

即時(shí) (just-in-time, JiT) 編譯

瀏覽器中啟動(dòng)并編譯所有的組件和模塊,動(dòng)態(tài)運(yùn)行應(yīng)用程序。開(kāi)發(fā)過(guò)程中使用。

指令 (directive)

告訴Angular怎么創(chuàng)建或改變HTML 元素。
分為三類(lèi):

  • 屬性型指令
  • 結(jié)構(gòu)性指令
  • 組件

屬性型指令

監(jiān)聽(tīng)或修改其它 HTML 元素、特性 (attribute)、屬性 (property)、組件的行為的命令,通常用作修改 HTML 屬性(樣式等)。
如ngClass、ngStyle。

結(jié)構(gòu)性指令

監(jiān)聽(tīng)或者修改元素的結(jié)構(gòu),刪除或者增加dom。如ngIf這個(gè)“條件化元素”指令,ngFor這個(gè)“重復(fù)器”指令。

組件 (component)

一個(gè)網(wǎng)頁(yè)中一切皆可以視為組件。
一個(gè)按鈕或者一個(gè)表格都可以是一個(gè)組件,其實(shí)組件就相當(dāng)于汽車(chē)零件,一個(gè)零件由各種材料(html、css、js等構(gòu)成),它只維護(hù)自身的邏輯。

封裝桶

就是把一個(gè)組件的部分文件放在一個(gè)index.ts一起拋出去供別的地方引用。

├─login
│ ├─login.component.ts
│ ├─login.service.ts
│ ├─login.directive.ts
│ ├─ index.ts
...
index.ts里面引入 login.component.ts等文件

export * from './login.component.ts'; 
export * from './login.service.ts'; 

別的地方引用

import { loginComponent, LoginService } from '../login';

直接寫(xiě)組件的文件夾會(huì)默認(rèn)尋找下面的index.ts

Angular 模塊同樣可以把組件、服務(wù)指令等放在一起拋出去。

數(shù)據(jù)綁定(data binding)

把后臺(tái)數(shù)據(jù)展示出來(lái),把用戶(hù)操作轉(zhuǎn)換為數(shù)據(jù)獲取到。

駝峰式命名法 (camelCase)

首字母小寫(xiě),其他字母或縮寫(xiě)首字母大寫(xiě)。又叫小寫(xiě)駝峰式命名法 (lower camel case) 。
函數(shù)、屬性和方法命名一般用在這個(gè)寫(xiě)法。

Pascal 命名法 (PascalCase)

每個(gè)單詞或縮寫(xiě)都以大寫(xiě)開(kāi)頭,也稱(chēng)大寫(xiě)駝峰式命名法。
類(lèi)名一般用這個(gè)寫(xiě)法。

中線命名法 (dash-case)

使用中線 (-) 分隔每個(gè)單詞,也稱(chēng)為烤串命名法 kebab-case。
指令的選擇器(例如my-app)和文件名(例如hero-list.component.ts)通常是用中線命名法來(lái)命名。

蛇形命名法

在多個(gè)詞之間用下劃線(_)分隔。也叫下劃線命名法。

裝飾器(decorator | decoration)

用一個(gè)不恰當(dāng)?shù)脑~語(yǔ):人模狗樣。
其實(shí)就是把一個(gè)未知的東西打扮一下讓Angular知道它是什么。
@component告訴Angular它是組件,@input告訴Angular它是輸入數(shù)據(jù),@Injectable告訴Angular它是服務(wù)。

依賴(lài)注入(dependency injection)

需要的東西(依賴(lài))直接從提供者(providers)那里拿過(guò)來(lái)用,不需要就不帶提供者玩。

注入器 (injector)

Angular 依賴(lài)注入系統(tǒng) (Dependency Injection System)中的一個(gè)對(duì)象, 它可以在自己的緩存中找到一個(gè)命名的“依賴(lài)”或者利用已注冊(cè)的提供商 (provider) 創(chuàng)建這樣一個(gè)依賴(lài)。

提供商 (provider)

依賴(lài)注入系統(tǒng)依靠提供商來(lái)創(chuàng)建依賴(lài)的實(shí)例。 它把一個(gè)查找令牌和代碼(有時(shí)也叫“配方”)關(guān)聯(lián)到一起,以便創(chuàng)建依賴(lài)值。

ECMAScript 語(yǔ)言

JavaScript統(tǒng)稱(chēng),有多個(gè)JavaScript版本。最新批準(zhǔn)的 JavaScript 版本是ECMAScript 2016(也稱(chēng)“ES2016”或“ES7”)。

ECMAScript 2015

簡(jiǎn)寫(xiě): ES6 語(yǔ)言
縮寫(xiě): ES2015 語(yǔ)言

ES5 語(yǔ)言

“ECMAScript 5”的簡(jiǎn)寫(xiě),大部分現(xiàn)代瀏覽器使用的 JavaScript 版本。

輸入屬性(input)

別的組件傳過(guò)來(lái)的數(shù)據(jù),數(shù)據(jù)值會(huì)從模板表達(dá)式等號(hào)右側(cè)的數(shù)據(jù)源流入這個(gè)屬性 。它和輸出屬性一般用作父子組件傳遞信息。
別人(父組件)眼里的我:

// 等號(hào)右側(cè)往左側(cè)流入
<me [receiver]='別的傳來(lái)的'></me>

其實(shí)我(子組件)是這樣的

@Component({
  selector: 'me'
  ...
})
..
@input()  receiver : string;

ngOnChanges(){
    console.log("傳過(guò)來(lái)的數(shù)據(jù)",this.receiver); // 打印出來(lái)‘別的傳來(lái)的’
}

輸出屬性

通過(guò)觸發(fā)父組件的事件進(jìn)行傳遞數(shù)據(jù)。
事件流從這個(gè)屬性流出到模板表達(dá)式等號(hào)的右邊的接收者。
子組件ts

@Output() sendHero: EventEmitter<any> = new EventEmitter();

ngOnInit() {
    this.sendHero.emit('timo');
}

父組件:

html:
<me (sendHero)="getHero($event)"></me>
ts:
getHero(hero :string){
   console.log("傳遞過(guò)來(lái)的是哪個(gè)召喚師",hero); //傳遞過(guò)來(lái)的是提莫
}

插值表達(dá)式 (interpolation)

把變量插入html中。
ts:

public me = '萬(wàn)年青桐五';

html:

<div>我是{{me}},求帶飛。</div> // 我是萬(wàn)年青桐五,求帶飛。

生命周期鉤子 (lifecycle hook)

不同時(shí)候可以做什么事情。比如20分鐘才可以打大龍。

  • ngOnChanges - 在輸入屬性 (input)/輸出屬性 (output)的綁定值發(fā)生變化時(shí)調(diào)用。
  • ngOnInit - 在第一次ngOnChanges完成后調(diào)用。
  • ngDoCheck - 開(kāi)發(fā)者自定義變更檢測(cè)。
  • ngAfterContentInit - 在組件內(nèi)容初始化后調(diào)用。
  • ngAfterContentChecked - 在組件內(nèi)容每次檢查后調(diào)用。
  • ngAfterViewInit - 在組件視圖初始化后調(diào)用。
  • ngAfterViewChecked - 在組件視圖每次檢查后調(diào)用。
  • ngOnDestroy - 在指令銷(xiāo)毀前調(diào)用。

模塊 (module)

模塊是一個(gè)內(nèi)聚的代碼塊,具有單一用途。就像前端和后端是兩個(gè)模塊,如果想要交流的話通過(guò)接口(Angular里面是引用)。

可觀察對(duì)象 (observable)

在接口請(qǐng)求的時(shí)候會(huì)用到,將異步數(shù)據(jù)轉(zhuǎn)化為數(shù)據(jù)流,自身也可以生成一些自定義的數(shù)據(jù)流。它是引自的RxJS(Reactive Extensions for JavaScript),一個(gè)第三方包。

管道

一個(gè)可以把米做成米飯的函數(shù),管道起到一個(gè)轉(zhuǎn)換的作用。
Angular內(nèi)置一些管道:DatePipe、UpperCasePipe、LowerCasePipe、CurrencyPipe和PercentPipe。
也可以自定義管道。
如:
假設(shè)

ts:
birthday = 1510156800000;
html:
<p> {{ birthday | date:"yy/MM/dd" }} </p>
轉(zhuǎn)換后:
<p> 2017/11/9 </p>

響應(yīng)式表單 (reactive forms)

通過(guò)組件中代碼構(gòu)建 Angular 表單的一種技術(shù)。 另一種技術(shù)是模板驅(qū)動(dòng)表單。
構(gòu)建響應(yīng)式表單時(shí):

  • 組件是“真理之源”。表單驗(yàn)證在組件代碼中定義。
  • 在組件類(lèi)中,使用new FormControl()或者FormBuilder顯性地創(chuàng)建每個(gè)控件。
  • 模板中的input元素不使用ngModel。
  • 相關(guān)聯(lián)的 Angular 指令全部以Form開(kāi)頭,例如FormGroup、FormControl和FormControlName。

動(dòng)態(tài)表單非常強(qiáng)大、靈活,它在復(fù)雜數(shù)據(jù)輸入的場(chǎng)景下尤其好用,例如動(dòng)態(tài)的生成表單控制器。

路由器 (router)

通過(guò)配置不同的路由,加載不同的組件或模塊,組合成不同的頁(yè)面。

路由組件 (routing component)

一個(gè)帶有路由插座 ( RouterOutlet ) 的 Angular 組件。
那什么是路由插座?其實(shí)可以理解為我們平時(shí)用的插排,每個(gè)孔都是一個(gè)路由,插上這個(gè)孔的電器是路由對(duì)應(yīng)的組件。這個(gè)插座加上插上的電器才是我們想要的組件。

路由插座怎么用?里面的過(guò)程是什么樣的?看下面。
文件形如:
├─list
│ ├─list.component.ts
│ ├─list.routes.ts
│ ├─lol
│ │ ├─ lol.component.ts // 里面包含了html,css等

list.component.ts

@Component({
  ..
  template: '
    <h1>擁有路由插座的組件</h1>
    <router-outlet></router-outlet>
  '
})

list.routes.ts


import { ListComponent } from './list.component';
import { LolComponent } from './lol/lol.component';

export const listRoutes = [{
     path: 'list',
        component: ListComponent,
        children: [
            {
                path: 'lol', 
                component: LolComponent
            }
}]

首先是匹配到list路由,這時(shí)候發(fā)現(xiàn)list的html里面有路由插座(router-outlet),就去找子路由,根據(jù)子路由把對(duì)應(yīng)的組件插入到路由插座的位置。

范圍化包 (scoped package)

是指Angular的框架源碼,它根據(jù)不同功能分成不同模塊的包,每個(gè)包都有一定的作用范圍。以@angular開(kāi)頭。

  • @angular/core:核心模塊,包含變化監(jiān)測(cè)、依賴(lài)注入、渲染等核心功能的代碼;
  • @angular/common:通用模塊,包含一些常用的內(nèi)置指令的代碼;
  • @angular/compiler:編譯相關(guān)功能;
  • @angular/platform-browser 和 @angular/platform-browser-dynamic 是跟平臺(tái)相關(guān)的,這兩個(gè)模塊支持 Angular應(yīng)用運(yùn)行在瀏覽器里,對(duì)應(yīng)的還有 @angular/platform-server,用于服務(wù)器端渲染;
  • @angular/forms: 引入表單相關(guān);
  • @angular/http: 網(wǎng)絡(luò)請(qǐng)求相關(guān);
  • @angular/router : 路由相關(guān);
  • @angular/animations: 動(dòng)畫(huà)相關(guān)。

分成模塊的好處是不用的話就不需要引入這個(gè)包,比如我不寫(xiě)動(dòng)畫(huà)就不用引入@angular/animations這個(gè)包。
題外話:和本主題無(wú)關(guān)的其他幾個(gè)包的作用:

  • core-js: 它是一個(gè)polyfill(填充庫(kù):不同的瀏覽器對(duì)Web標(biāo)準(zhǔn)的支持程度也不同,填充庫(kù)(polyfill)能幫我們把這些不同點(diǎn)進(jìn)行標(biāo)準(zhǔn)化 ),用于兼容一些高級(jí)的語(yǔ)言特性以兼容更多瀏覽器平臺(tái)。
  • rxjs:用于解決異步和事件組合問(wèn)題,多用于管理接口請(qǐng)求到的數(shù)據(jù)。
  • zone.js: 用來(lái)幫助處理瀏覽器異步事件的工具庫(kù),Angular的變化檢測(cè)機(jī)制基于這個(gè)庫(kù)實(shí)現(xiàn)的,這是必須引入的。

服務(wù) (service)

服務(wù)用于封裝不與任何特定視圖相關(guān)的數(shù)據(jù)和邏輯,或者用于在組件之間共享數(shù)據(jù)和邏輯。一般用于接口請(qǐng)求或傳遞數(shù)據(jù)。

模板 (template)

其實(shí)就是個(gè)html

@Component({
  template: `<div>其實(shí)就是個(gè)html</div>`
})

模板表達(dá)式 (template expression)

html里面的表達(dá)式。Angular會(huì) 執(zhí)行這個(gè)表達(dá)式得到值,并把它賦值給綁定目標(biāo)的屬性,這個(gè)綁定目標(biāo)可能是 HTML 元素、組件或指令。

<div [property]="1+1"></div>

轉(zhuǎn)譯(transpile)

把一種形式的 JavaScript(例如 TypeScript)轉(zhuǎn)換成另一種形式的 JavaScript(例如 ES5)的過(guò)程。

視圖 (view)

視圖是屏幕中一小塊,用來(lái)顯示信息并響應(yīng)用戶(hù)動(dòng)作,例如點(diǎn)擊、移動(dòng)鼠標(biāo)和按鍵。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容