Vue.js watch監(jiān)視屬性知識點總結(jié)
這個屬性用來監(jiān)視某個數(shù)據(jù)的變化,并觸發(fā)相應的回調(diào)函數(shù)執(zhí)行
1.基本用法
(1)添加watch屬性,值為一個對象。對象的屬性名就是要監(jiān)視的數(shù)據(jù),屬性值為回調(diào)函數(shù),每當這個屬性名對應的值發(fā)生變化,就會觸發(fā)該回調(diào)函數(shù)執(zhí)行
(2)回調(diào)函數(shù)有2個參數(shù):
newVal:數(shù)據(jù)發(fā)生改變后的值
oldVal:數(shù)據(jù)發(fā)生改變前的值
var vm = new Vue({
el:'#app',
data: {
name: '郭靖'
},
watch: {
name(newVal,oldVal){
console.log('name的值發(fā)生了變化')
console.log(newVal,oldVal)
}
}
})
vm.name = "郭大俠" // 執(zhí)行這行代碼,會觸發(fā)對應的回調(diào)函數(shù)
執(zhí)行結(jié)果:
name的值發(fā)生了變化 郭大俠 郭靖
2.監(jiān)聽對象內(nèi)部屬性的變化
前面的例子只是監(jiān)聽data中的第一層數(shù)據(jù),如果要監(jiān)聽多層次的數(shù)據(jù),例如a.b.c,則屬性名需要用引號包裹起來
<body>
<div id="app">
<p>{{name}}</p>
<button @click="test">修改wife.name</button>
<button @click="test2">修改wife</button>
</div>
</body>
<script>
var vm = new Vue({
el:'#app',
data: {
name: '郭靖',
age: 20,
wife: {
name: '黃蓉',
sex: '女'
}
},
watch: {
//監(jiān)聽wife中的name屬性
'wife.name'(newVal,oldVal){
console.log('wife.name發(fā)生了改變')
},
//監(jiān)聽wife
'wife'(newVal,oldVal){
console.log('wife發(fā)生了改變')
}
},
methods:{
test(){
this.wife.name = "'黃幫主'"
},
test2(){
this.wife = {name:'我不是黃蓉',sex:'women'}
}
}
})
</script>
運行結(jié)果表明,無論是他父級對象的值發(fā)生了改變,還是它本身的值發(fā)生了改變,都會使這個監(jiān)視屬性的回調(diào)函數(shù)執(zhí)行。

3.監(jiān)聽路由變化
提示:路由的路徑信息保存在$route.path中
watch:{
'$route.path':function(newval){
console.log('change')
}
}
4.深度監(jiān)聽
監(jiān)視屬性只能監(jiān)聽到當前對象值的變化,而對象內(nèi)部的屬性變化不會監(jiān)聽到,前面我們監(jiān)聽了wife和wife.name,修改了wife.name并不會觸發(fā)監(jiān)聽wife的回調(diào)函數(shù)。
想要監(jiān)聽對象內(nèi)部的屬性值變化,需要進行相應的配置。
- deep:深度監(jiān)聽,默認false
- handler:回調(diào)函數(shù)
- immediate:頁面初始化時是否觸發(fā)回調(diào),默認false
var vm = new Vue({
el:'#app',
data: {
name: '郭靖',
age: 20,
wife: {
name: '黃蓉',
sex: '女'
}
},
watch: {
wife:{
deep:true,
handler:function(newVal,oldVal){
console.log('value is change')
},
immediate:true
}
}
})
vm.wife.name = '黃幫主' // 觸發(fā)wife屬性對應的回調(diào)
以上就是關(guān)于Vue.js watch監(jiān)視屬性的全部知識點,感謝大家的學習和對腳本之家的支持。
相關(guān)文章
vue3中?provide?和?inject?用法小結(jié)
父子組件傳遞數(shù)據(jù)時,使用的是props和emit,父傳子時,使用的是?props,如果是父組件傳孫組件時,就需要先傳給子組件,子組件再傳給孫組件,如果多個子組件或多個孫組件使用時,就需要傳很多次,會很麻煩,這篇文章主要介紹了vue3中?provide?和?inject?用法,需要的朋友可以參考下2023-11-11
基于vue+electron實現(xiàn)文件下載打開wps預覽
這篇文章主要給大家介紹了基于vue+electron實現(xiàn)文件下載打開wps預覽,文中有詳細的代碼示例供大家借鑒參考,感興趣的同學可以參考閱讀下2023-08-08
react+vite動態(tài)導入報錯@vite-ignore的問題及解決
這篇文章主要介紹了react+vite動態(tài)導入報錯@vite-ignore的問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
關(guān)于Vue3中defineProps用法圖文詳解
在vue3中組件傳參有很多種方式,和v2大差不差,但是有的地方還是有很多的區(qū)別,下面這篇文章主要給大家介紹了關(guān)于Vue3中defineProps用法的相關(guān)資料,需要的朋友可以參考下2022-11-11
vue-image-crop基于Vue的移動端圖片裁剪組件示例
這篇文章主要介紹了vue-image-crop基于Vue的移動端圖片裁剪組件示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08

