1. Watchers คืออะไร?
Watchers ใน Vue.js คือฟังก์ชันที่ช่วยเฝ้าดูการเปลี่ยนแปลงของค่าต่าง ๆ ใน data
หรือ computed properties
และทำการเรียกใช้งานฟังก์ชันเมื่อค่าดังกล่าวเปลี่ยนแปลง
Watchers เหมาะสำหรับสถานการณ์ที่คุณต้องการทำงานบางอย่างเมื่อข้อมูลเปลี่ยนแปลง เช่น การเรียก API, การปรับค่าคำนวณ หรือการอัปเดตข้อมูลอื่น ๆ
2. การใช้งาน Watchers เบื้องต้น
ตัวอย่าง:
<template>
<div>
<h1>Search Example</h1>
<input v-model="searchQuery" placeholder="Type something..." />
<p>Searching for: {{ searchQuery }}</p>
</div>
</template>
<script>
export default {
data() {
return {
searchQuery: ''
};
},
watch: {
searchQuery(newQuery, oldQuery) {
console.log(`Search changed from "${oldQuery}" to "${newQuery}"`);
}
}
};
</script>
ผลลัพธ์:
- เมื่อ
searchQuery
เปลี่ยนแปลง จะมีข้อความใน Console เช่น
Search changed from "" to "Vue.js"
3. การใช้ Watchers สำหรับการคำนวณ
ตัวอย่าง:
<template>
<div>
<h1>Price Calculator</h1>
<input type="number" v-model="price" placeholder="Enter price" />
<input type="number" v-model="quantity" placeholder="Enter quantity" />
<p>Total: {{ total }}</p>
</div>
</template>
<script>
export default {
data() {
return {
price: 0,
quantity: 0,
total: 0
};
},
watch: {
price() {
this.calculateTotal();
},
quantity() {
this.calculateTotal();
}
},
methods: {
calculateTotal() {
this.total = this.price * this.quantity;
}
}
};
</script>
คำอธิบาย:
- เมื่อ
price
หรือquantity
เปลี่ยนแปลง ฟังก์ชันcalculateTotal
จะถูกเรียกใช้งานเพื่ออัปเดตtotal
4. การใช้งาน Immediate และ Deep Watch
Immediate Watch
- ใช้
immediate: true
เพื่อเรียก Watcher ทันทีที่ Component ถูกโหลด
<script>
export default {
data() {
return {
name: ''
};
},
watch: {
name: {
handler(newName) {
console.log(`Name updated to: ${newName}`);
},
immediate: true
}
}
};
</script>
Deep Watch
- ใช้สำหรับเฝ้าดู Object ที่มีโครงสร้างซับซ้อน
<script>
export default {
data() {
return {
user: {
name: '',
age: 0
}
};
},
watch: {
user: {
handler(newUser) {
console.log('User data updated:', newUser);
},
deep: true
}
}
};
</script>
คำอธิบาย:
deep: true
ใช้สำหรับตรวจสอบการเปลี่ยนแปลงในทุก Property ของ Objectuser
5. การใช้งาน Watchers ร่วมกับ API
ตัวอย่าง:
<template>
<div>
<h1>Search API</h1>
<input v-model="query" placeholder="Search..." />
<p>{{ result }}</p>
</div>
</template>
<script>
export default {
data() {
return {
query: '',
result: ''
};
},
watch: {
query: {
handler(newQuery) {
this.fetchData(newQuery);
},
immediate: true
}
},
methods: {
fetchData(query) {
if (query) {
// จำลองการเรียก API
this.result = `Results for "${query}"`;
} else {
this.result = '';
}
}
}
};
</script>
คำอธิบาย:
- เมื่อ
query
เปลี่ยนแปลง ฟังก์ชันfetchData
จะถูกเรียกใช้งานเพื่ออัปเดตผลลัพธ์การค้นหา
6. สรุป
ในบทนี้ คุณได้เรียนรู้เกี่ยวกับ:
- การใช้งาน Watchers เพื่อเฝ้าดูการเปลี่ยนแปลงของข้อมูล
- การใช้งาน Immediate และ Deep Watch
- การใช้ Watchers เพื่อจัดการการคำนวณและการเรียก API
ในบทถัดไป เราจะศึกษาการใช้ Directive ใน Vue.js อย่างละเอียด!