Watch 在 Vue 中是一個非常重要的概念,它可以監(jiān)聽 Vue 實例上數(shù)據(jù)的變化,并在數(shù)據(jù)變化時觸發(fā)相應的回調(diào)函數(shù)。在 Vue 的生命周期中,掛載階段(mounted)之前會執(zhí)行實例中的 watch 函數(shù)。
watch 選項有兩種寫法,第一種是作為一個對象的鍵值對,其語法格式為:
new Vue({
watch: {
// 監(jiān)聽的數(shù)據(jù)
message: function (newVal, oldVal) {
// 回調(diào)函數(shù)
}
}
})
在上面的代碼例子中,我們監(jiān)視了 Vue 實例中 message 屬性的變化,當 message 發(fā)生變化時,將會觸發(fā)函數(shù)。函數(shù)的第一個參數(shù)是新值(newVal),第二個參數(shù)是舊值(oldVal)。
另外,watch 還可以使用字符串來簡寫回調(diào)函數(shù),例如:
new Vue({
data: {
message: 'Hello, Vue!'
},
watch: {
message: 'messageChanged'
},
methods: {
messageChanged: function (newVal, oldVal) {
console.log('Message changed from ' + oldVal + ' to ' + newVal + '.')
}
}
})
在上面的例子中,我們使用字符串簡寫了回調(diào)函數(shù),將會觸發(fā) Vue 實例中 messageChanged 方法的執(zhí)行。
Watch 還可以使用 deep 屬性監(jiān)聽對象的變化:
new Vue({
data: {
person: {
name: 'Alice',
age: 20
}
},
watch: {
'person': {
handler: function (newVal, oldVal) {
console.log('Person changed from ' + JSON.stringify(oldVal) + ' to ' + JSON.stringify(newVal) + '.')
},
deep: true
}
}
})
在上面的例子中,我們使用 deep 屬性對 person 對象進行了監(jiān)聽,當 person 對象中的任意屬性值發(fā)生改變時,都會觸發(fā)回調(diào)函數(shù)。
Watch 還可以使用 immediate 屬性來在組件完成初始化后立即執(zhí)行回調(diào)函數(shù):
new Vue({
data: {
message: 'Hello, VueJs!'
},
watch: {
message: {
handler: function (newVal, oldVal) {
console.log('Message changed from ' + oldVal + ' to ' + newVal + '.')
},
immediate: true
}
}
})
在上面的例子中,我們將 immediate 屬性設置為 true,這樣就會在組件初始化時先執(zhí)行一次回調(diào)函數(shù)。
使用 Watch 能夠在需要時監(jiān)聽 Vue 實例數(shù)據(jù)的變化,及時地對數(shù)據(jù)進行處理,并進行相關的操作,從而提高開發(fā)效率和用戶體驗。