1. v-for
คืออะไร?
v-for
เป็น Directive ใน Vue.js ที่ใช้สำหรับการวนลูปข้อมูล เช่น Array, Object หรือแม้แต่จำนวนตัวเลข เพื่อแสดงผลรายการข้อมูลซ้ำ ๆ ใน HTML
2. การใช้งาน v-for
กับ Array
ตัวอย่างพื้นฐาน:
<template>
<div>
<h1>Fruits List</h1>
<ul>
<li v-for="(fruit, index) in fruits" :key="index">
{{ index + 1 }}. {{ fruit }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
fruits: ['Apple', 'Banana', 'Cherry']
};
}
};
</script>
ผลลัพธ์:
- Apple
- Banana
- Cherry
คำอธิบาย:
v-for="(fruit, index) in fruits"
ใช้วนลูปผ่าน Arrayindex
เป็นค่าดัชนีของ Array:key="index"
ใช้เพื่อเพิ่มประสิทธิภาพใน DOM
3. การใช้งาน v-for
กับ Object
ตัวอย่าง:
<template>
<div>
<h1>User Details</h1>
<ul>
<li v-for="(value, key) in user" :key="key">
{{ key }}: {{ value }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
user: {
name: 'John Doe',
age: 30,
email: '[email protected]'
}
};
}
};
</script>
ผลลัพธ์:
- name: John Doe
- age: 30
- email: [email protected]
คำอธิบาย:
v-for="(value, key) in user"
ใช้เพื่อวนลูปผ่าน Objectkey
แสดงชื่อ Property ใน Object
4. การใช้งาน v-for
กับช่วงตัวเลข
ตัวอย่าง:
<template>
<div>
<h1>Numbers</h1>
<ul>
<li v-for="number in 5" :key="number">
{{ number }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {};
}
};
</script>
ผลลัพธ์:
- 1
- 2
- 3
- 4
- 5
คำอธิบาย:
v-for="number in 5"
จะวนลูป 5 รอบ โดยnumber
มีค่าตั้งแต่ 1 ถึง 5
5. การใช้ v-for
ซ้อนกัน
ตัวอย่าง:
<template>
<div>
<h1>Table of Items</h1>
<table border="1">
<tr v-for="(row, rowIndex) in table" :key="rowIndex">
<td v-for="(cell, cellIndex) in row" :key="cellIndex">
{{ cell }}
</td>
</tr>
</table>
</div>
</template>
<script>
export default {
data() {
return {
table: [
['A1', 'A2', 'A3'],
['B1', 'B2', 'B3'],
['C1', 'C2', 'C3']
]
};
}
};
</script>
ผลลัพธ์:
A1 | A2 | A3 |
---|---|---|
B1 | B2 | B3 |
C1 | C2 | C3 |
คำอธิบาย:
v-for
สามารถซ้อนกันได้ เช่น ใช้ใน<tr>
และ<td>
สำหรับการวนลูปข้อมูล 2 มิติ
6. การใช้ Key กับ v-for
ทำไมต้องใช้ key
?
- เพื่อเพิ่มประสิทธิภาพในการอัปเดต DOM
- ใช้ระบุแต่ละรายการในลูปอย่างชัดเจน
ตัวอย่างที่ดี:
<li v-for="item in items" :key="item.id">{{ item.name }}</li>
ตัวอย่างที่ไม่ควรทำ:
<li v-for="item in items">{{ item.name }}</li>
7. การกรองข้อมูลก่อนการวนลูป
คุณสามารถกรองข้อมูลก่อนการแสดงผลด้วย Computed Property
ตัวอย่าง:
<template>
<div>
<h1>Filtered List</h1>
<ul>
<li v-for="item in filteredItems" :key="item.id">
{{ item.name }}
</li>
</ul>
</div>
</template>
<script>
export default {
data() {
return {
items: [
{ id: 1, name: 'Apple', type: 'fruit' },
{ id: 2, name: 'Carrot', type: 'vegetable' },
{ id: 3, name: 'Banana', type: 'fruit' }
],
filter: 'fruit'
};
},
computed: {
filteredItems() {
return this.items.filter(item => item.type === this.filter);
}
}
};
</script>
ผลลัพธ์:
จะแสดงเฉพาะรายการที่มี type
เป็น fruit
8. สรุป
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ:
- การใช้
v-for
กับ Array, Object, และช่วงตัวเลข - การใช้งาน
v-for
ซ้อนกัน - การใช้ Key เพื่อเพิ่มประสิทธิภาพ DOM
- การกรองข้อมูลก่อนการวนลูป
ในบทถัดไป เราจะศึกษาวิธีจัดการ Event ใน Vue.js!