ngFor
與ngIf
是屬於結構型指令的一種。
結構型指令是透過新增和刪除 DOM 元素來更改 DOM 佈局的指令,使用簡寫語法時,Angular 在一個元素上只允許有一個結構型指令。
而 ngFor
以及ngIf
很特別的是,他是可以直接撰寫在 html 當中的,這實在是很酷的一件事!
ngFor
,類似於原生 JS 的 for 循環,主要用於遍歷某個集合,並且將其值渲染到 Template 上。
首先在閱讀 Angular 文檔時,你會看見寫法是 *ngFor
,前方有加了一個星號,而這個星號其實是一個語法糖,在 Angular 看見這個符號後,會自動將其轉換為 <ng-template>
。
<ng-template>
<ng-template>
是一個模板元素,通常在使用結構型指令時才會產生作用。
Angular's
<ng-template>
element defines a template that is not rendered by default. - Angular 官方。
我們會使用 <ul *ngFor = "let item of items"></ul>
,由這段寫法,我們可以遍歷 items 集合,來獲取每一個 item 的值。
Angular 提供了一系列的值,讓我們可以在使用 ngFor
遍歷集合時取得。
以下值可透過 Angular 官方文檔查詢到。
要注意的是:first, last, even, odd 這些值都會得到布林值,而不是內容。
ngIf
,類似於原生 JS 的 If 判斷式,使用布林值來做判斷,根據 true,False,來判斷是否渲染到 Template 上。
注意:當 ngIf
返回 false 值時,該元素將從 DOM 中刪除,並且在刪除 HTML 元素時,作用域會被破壞,當元素重新放回檢視時,會建立一個新的作用域。(這部分可能會與 ngShow 來做比較)
在 Angular 中,使用ngIf
也可以加入 &&
, ||
,!
這類的邏輯運算子來進行判斷。
原生 JS 當中,具有 if...else
語句,當然,ngIf
也有,使用方式如下:
上方程式碼使用了 *ngIf="!task.isCheck; else tDone"
來判斷任務是否已經完成,若完成,則刪除 button,改為顯示 <ng-template #tDone>DONE</ng-template>
Angular