directive (指令),是 DOM 元素上的一個 mark(標記),像是屬性、元素名稱或是 style,它用來告訴 template 將指定的行為附加到該 DOM 元素上(像是事件監聽),替元素增加新的方法或是功能。
directive 一共可以分為三種類型:
其實在之前我們已經使用過了 Angular 中的指令,像是 *ngIf
以及 *ngFor
,這兩個指令屬於結構型指令,所以這一章節會針對 Attribute directives (屬性型指令)
來做介紹。
屬性型指令,因其在 Template 中看起來就像是 HTML Tag 的屬性,故以此命名。
在開發的過程中,可能會經常遇到需要改變樣式的狀況,
常見的內建指令有以下三種:
isDone
這個 class<div [ngClass]="{'isDone':true}"></<div>
<div *ngFor="let task of tasks; let i = index; let first = first">
<div class="task__item">
<span>{{ i + 1 }}</span>
<input type="checkbox" (change)="handleChecked(i)" />
<!-- 使用 ngClass 來做判斷,若 i 值 = 0,則為該元素添加 isFirst 的 class -->
<span [ngClass]="{ isFirst: i === 0 }">{{ task.taskTitle }}</span>
<button *ngIf="!task.isCheck; else tDone" (click)="handleRemoveTask(i)">
remove
</button>
<ng-template #tDone>DONE</ng-template>
</div>
</div>
.isFirst {
font-size: 20px;
font-weight: 600;
}
<div [ngStyle]="{'background-color':'green'}"></<div>
<!-- 使用 ngStyle 判斷任務是否完成,如果完成就加粗 -->
<div class="task__item" [ngStyle]="{ fontWeight: task.isCheck ? 600 : '' }">
<span>{{ i + 1 }}</span>
<input type="checkbox" (change)="handleChecked(i)" />
<span>{{ task.taskTitle }}</span>
<button *ngIf="!task.isCheck; else tDone" (click)="handleRemoveTask(i)">
remove
</button>
<ng-template #tDone>DONE</ng-template>
</div>
在渲染視圖之前,先將資料進行轉換,但是原始資料並不會被影響!
Angular 中有提供了一些內建的 Pipes 供使用,像是轉換字型是大寫或小寫,數字轉為小數點或是進行日期的轉換。
那為什麼會叫做 pipes ? 因為他的符號是寫成 |
看起來就像是一個管子的樣子!
<h1>{{title | uppercase}}</h1>
<h1>{{title | lowercase}}</h1>
<h1>{{title | titlecase}}</h1>
<h1>{{title | slice:從哪裡開始:到哪裡結束}}</h1>
// 假設 title = "today is sunday"
<h1>{{title | slice:3}}<h1>
// 這裡會呈現 "ay is sunday",從 index 3 開始
<h1>{{title | slice:3:7}}</h1>
// 這裡會呈現 "ay i",代表從 index 3 開始,在 index 7 之前結束
<h1>{{object | json}}</h1>
{{count | number:"在小數點前的最小位數.小數點後的最小位數-小數點後的最大位數"}}
// 假設 count = 345.2345
<p>{{count | number:"1.2-3"}}</p>
// 這裡會呈現 345.235
<p>{{count | number:"1.6-7"}}</p>
// 這裡會呈現 345.234500
{{count | percent}}
{{count | currency : "貨幣代號"}}
{{myDate | date:"short"}}
{{myDate | date:"shortDate"}}
Angular