Angular 新舊控制流語法比較(含 Vue 對照)
在補充 Vue 比較之前,讓我們先看看最基本的列表渲染:
Vue vs Angular 列表渲染對照
<!-- Vue 的 v-for -->
<div v-for="item in items" :key="item.id">
{{ item.name }}
</div>
<!-- Angular 舊語法 *ngFor -->
<div *ngFor="let item of items">
{{ item.name }}
</div>
<!-- Angular 新語法 @for -->
@for (item of items; track item.id) {
<div>{{ item.name }}</div>
}
帶索引的遍歷比較
<!-- Vue -->
<div v-for="(item, index) in items" :key="item.id">
{{ index + 1 }}. {{ item.name }}
</div>
<!-- Angular 舊語法 -->
<div *ngFor="let item of items; let i = index">
{{ i + 1 }}. {{ item.name }}
</div>
<!-- Angular 新語法 -->
@for (item of items; track item.id; let i = $index) {
<div>{{ i + 1 }}. {{ item.name }}</div>
}
空值處理比較
<!-- Vue -->
<template v-if="items.length">
<div v-for="item in items" :key="item.id">
{{ item.name }}
</div>
</template>
<template v-else>
<div>No items found</div>
</template>
<!-- Angular 新語法 -->
@for (item of items; track item.id) {
<div>{{ item.name }}</div>
} @empty {
<div>No items found</div>
}
Select 下拉選單比較
<!-- Vue -->
<select v-model="selectedId">
<option value="">Select option</option>
<option v-for="item in items"
:key="item.id"
:value="item.id">
{{ item.name }}
</option>
</select>
<!-- Angular -->
<select [(ngModel)]="selectedId">
<option value="">Select option</option>
@for (item of items; track item.id) {
<option [value]="item.id">{{ item.name }}</option>
}
</select>
主要差異總結
語法結構
Vue:使用
v-for
指令,需要:key
Angular 新版:使用
@for
,需要track
Angular 舊版:使用
*ngFor
空值處理
Vue:使用
v-if
/v-else
Angular 新版:使用
@empty
Angular 舊版:需要額外的
*ngIf
索引使用
Vue:
(item, index) in items
Angular 新版:
let i = $index
Angular 舊版:
let i = index
key/track 處理
Vue:
:key="item.id"
(必須)Angular 新版:
track item.id
(必須)Angular 舊版:不強制要求
Last updated