
指令是Angular 提供的操作DOM的途徑。指令分為属性指令和结构指令。
屬性指令:修改現有元素的外觀或行為,使用[]包裹。
結構指令:增加、刪除DOM 節點修改佈局,使用*作為指令前綴。 【相關教學推薦:《angular教學》】
1、內建指令
1.1 *ngIf
依條件渲染DOM 節點或移除DOM 節點。
<div *ngIf="data.length == 0">沒有更多資料</div>
<div *ngIf="data.length > 0; then dataList else noData"></div> <ng-template #dataList>課程清單</ng-template> <ng-template #noData>沒有更多資料</ng-template>
ng-template是用來定義模板的,當使用ng-template定義好一個模板之後,可以用ng-container和templateOutlet指令來進行使用。
<ng-template #loading> <button (click)="login()">login</button> <button (click)="sigup()">sigup</button> </ng-template> <ng-container *ngTemplateOutlet="loading"> </ng-container>
1.2 [hidden]
根據條件显示DOM 節點或隐藏DOM 節點(display)。
<div [hidden]="data.length == 0">課程清單</div> <div [hidden]="data.length > 0">沒有更多資料</div>
1.3 *ngFor
遍歷資料產生HTML結構
interface List {
id: number
name: string
age: number
}
list: List[] = [
{ id: 1, name: "張三", age: 20 },
{ id: 2, name: "李四", age: 30 }
] <li
*ngFor="
let item of list;
let i = index;
let isEven = even;
let isOdd = odd;
let isFirst = first;
let isLast = last;
"
>
</li> <li *ngFor="let item of list; trackBy: identify"></li>
identify(index, item){
return item.id;
} 2、自訂指令
需求:為元素設定預設背景顏色,滑鼠移入時的背景顏色以及移出時的背景顏色。
<div [appHover]="{ bgColor: 'skyblue' }">Hello Angular</div> import { AfterViewInit, Directive, ElementRef, HostListener, Input } from "@angular/core"
// 接收參的數字類型interface Options {
bgColor?: string
}
@Directive({
selector: "[appHover]"
})
export class HoverDirective implements AfterViewInit {
// 接收參數@Input("appHover") appHover: Options = {}
// 要操作的DOM 節點element: HTMLElement
// 取得要操作的DOM 節點constructor(private elementRef: ElementRef) {
this.element = this.elementRef.nativeElement
}
// 元件模板初始完成後設定元素的背景顏色ngAfterViewInit() {
this.element.style.backgroundColor = this.appHover.bgColor || "skyblue"
}
// 為元素新增滑鼠移入事件@HostListener("mouseenter") enter() {
this.element.style.backgroundColor = "pink"
}
// 為元素新增滑鼠移出事件@HostListener("mouseleave") leave() {
this.element.style.backgroundColor = "skyblue"
}
}管道的作用是格式化组件模板数据。
1、內建管道
date 日期格式化
currency 貨幣格式化
uppercase 轉大寫
lowercase 轉小寫
json 格式化json 資料
{{ date | date: "yyyy-MM-dd" }} 2、自訂管道
需求:指定字串不能超過規定的長度
<!-- 這是一... -->
{{'這是一個測試' | summary: 3}} // summary.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'summary'
});
export class SummaryPipe implements PipeTransform {
transform (value: string, limit?: number) {
if (!value) return null;
let actualLimit = (limit) ? limit : 50;
return value.substr(0, actualLimit) + '...';
}
} // app.module.ts
import { SummaryPipe } from './summary.pipe'
@NgModule({
declarations: [
SummaryPipe
]
});