vue深度監(jiān)聽(監(jiān)聽對象和數(shù)組的改變)與立即執(zhí)行監(jiān)聽實(shí)例
1.vue中監(jiān)聽對象數(shù)據(jù)屬性值的改變,可以使用深度監(jiān)聽
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
form: { // 深度監(jiān)聽
handler(val, oldVal){
console.log('currentForm',val, oldVal)
// 但是這兩個(gè)值打印出來卻都是一樣的,因?yàn)樗鼈兊囊弥赶蛲粋€(gè)對象/數(shù)組
},
deep:true
}
}
注意:我們應(yīng)盡量避免在監(jiān)聽方法中更改當(dāng)前監(jiān)聽對象的屬性值,以免再次觸發(fā)監(jiān)聽函數(shù)
2.若只監(jiān)聽某個(gè)或部分屬性值的變化,則可以配合計(jì)算屬性computed來解決
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
computed: {
status() {
return this.form.status
}
},
watch: {
status() {
console.log('currentVal', this.status)
}
}
當(dāng)然,上面這種方法會多出一個(gè)計(jì)算屬性,并不是最好的方法,通過查看官方api,其實(shí)還有一種方法:
data () {
return {
form: {
status: '',
cpufrequency: '',
systemstacksize: '',
scalabilityclass: ''
}
}
},
watch: {
'form.status'(val, oldVal) {
console.log('currentVal', val)
}
}
3.取消監(jiān)聽
var unwatch = vm.$watch('a', cb) // 返回一個(gè)取消監(jiān)聽函數(shù)
unwatch() // 取消觀察函數(shù)
4.立即觸發(fā)監(jiān)聽
我們有時(shí)會有這個(gè)需求,在頁面初始化時(shí)執(zhí)行某個(gè)監(jiān)聽。因此,我們可能會在 created 中去調(diào)用需要執(zhí)行的監(jiān)聽代碼,但現(xiàn)在我們可以使用 immediate 來實(shí)現(xiàn)這個(gè)功能。
watch: {
'form.status'() {
handler(val, oldVal) {
// 執(zhí)行一些操作
},
immediate: true
}
}
補(bǔ)充知識:vue watch監(jiān)聽數(shù)據(jù),新老值一樣?讓其不一樣吧!
我就廢話不多說了,大家還是直接看代碼吧~
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testData: {
handler: (val, olVal) => {
console.log('我變化了', val, olVal)
},
deep: true
}
}
如果testData發(fā)生了變化,就會打印出val,olVal,但是他們打印出來的結(jié)果都是一樣的,因?yàn)閿?shù)據(jù)同源。雖然可以監(jiān)聽到他的變化,但是要比較數(shù)據(jù)差異就不行了。如果想要得到不同的值可以結(jié)合計(jì)算屬性。
data:{
testData:{
dataInfo:{
a: '我是a',
b: '我是b'
}
}
},
watch: {
testDataNew: {
handler: (val, olVal) => {
console.log('我變化了', val, olVal)
},
deep: true
}
},
computed: {
testDataNew() {
return JSON.parse(JSON.stringify(this.testData))
}
}
以上這篇vue深度監(jiān)聽(監(jiān)聽對象和數(shù)組的改變)與立即執(zhí)行監(jiān)聽實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue3子組件實(shí)現(xiàn)v-model用法的示例代碼
在Vue 3中,實(shí)現(xiàn)自定義的input組件并支持v-model綁定,涉及到對modelValue這個(gè)默認(rèn)prop的處理和對應(yīng)的update:modelValue事件的觸發(fā),本文給大家介紹了Vue3子組件實(shí)現(xiàn)v-model用法的示例,需要的朋友可以參考下2024-04-04
Vue2中使用axios的3種方法實(shí)例總結(jié)
axios從功能上來說就是主要用于我們前端向后端發(fā)送請求,是基于http客戶端的promise,面向?yàn)g覽器和nodejs,下面這篇文章主要給大家介紹了關(guān)于Vue2中使用axios的3種方法,需要的朋友可以參考下2022-09-09
詳解vue3結(jié)合ts項(xiàng)目中使用mockjs
這篇文章主要為大家介紹了vue3結(jié)合ts項(xiàng)目中使用mockjs示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
vue開發(fā)中如何在js文件里使用pinia和組件同步
在JavaScript文件中封裝涉及到使用Pinia的方法時(shí),發(fā)現(xiàn)Pinia和組件內(nèi)容并不同步,二者的狀態(tài)是獨(dú)立的,解決辦法是,在新建對象的時(shí)候,將Pinia作為參數(shù)傳入,本文給大家介紹vue開發(fā)中如何在js文件里使用pinia和組件同步,感興趣的朋友一起看看吧2024-10-10
Vue項(xiàng)目中引入ESLint校驗(yàn)代碼避免代碼錯(cuò)誤
這篇文章主要為大家介紹了Vue項(xiàng)目中引入ESLint插件校驗(yàn)代碼避免代碼錯(cuò)誤的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
如何利用vue+vue-router+elementUI實(shí)現(xiàn)簡易通訊錄
這篇文章主要介紹了如何利用vue+vue-router+elementUI實(shí)現(xiàn)簡易通訊錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05
vue實(shí)現(xiàn)文字轉(zhuǎn)語音功能詳解
這篇文章主要介紹了vue實(shí)現(xiàn)文字轉(zhuǎn)語音功能詳解的相關(guān)資料,需要的朋友可以參考下2022-09-09
在組件中修改vuex中state的具體實(shí)現(xiàn)方法
在組件中修改 Vuex 中的 state,根據(jù)使用的 Vue 版本(Vue 2 或 Vue 3)不同,有不同的操作方式,但總體思路都是借助 Vuex 提供的 mutations 或 actions 來實(shí)現(xiàn),以下分別介紹兩種版本下的具體實(shí)現(xiàn)方法,需要的朋友可以參考下2025-02-02

