Vue中watch的多種使用方法小結(jié)
watch的多種用法
1.屬性: 方法(最常用)
使用最廣泛的方式是將watch選項(xiàng)設(shè)置為一個(gè)對(duì)象,對(duì)象的屬性是要觀測(cè)的數(shù)據(jù)屬性,值是一個(gè)回調(diào)函數(shù),該回調(diào)函數(shù)會(huì)在屬性變化時(shí)觸發(fā)。例如:
<strong>watch: {
firstName: function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
}
}</strong>2.屬性: 數(shù)組
你可以在一個(gè)watch選項(xiàng)中觀測(cè)多個(gè)數(shù)據(jù)屬性,這可以通過(guò)將要觀測(cè)的屬性放入一個(gè)數(shù)組中來(lái)實(shí)現(xiàn)。例如:
<strong>watch: {
'person.firstName': function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
},
'person.lastName': function(newVal, oldVal) {
console.log('lastName changed:', newVal, oldVal);
}
}</strong>3.屬性: 對(duì)象
另一種觀測(cè)多個(gè)屬性的方式是使用對(duì)象。在這種情況下,對(duì)象的鍵是要觀測(cè)的屬性,值是一個(gè)包含處理函數(shù)、handler的對(duì)象。
該處理函數(shù)與屬性值的回調(diào)函數(shù)相同,用于在屬性更改時(shí)執(zhí)行組件中的邏輯。它還可以包含其他選項(xiàng),例如deep和immediate。例如:
<strong>watch: {
person: {
handler: function(newVal, oldVal) {
console.log('person changed:', newVal, oldVal);
},
deep: true
}
}</strong>4.屬性:字符串
還可以使用字符串指定要觀察的屬性,然后使用對(duì)應(yīng)的方法名稱作為回調(diào)函數(shù)。這個(gè)選項(xiàng)在只有一個(gè)屬性需要觀察的情況下非常有用。例如:
<strong>watch: {
'person.firstName': 'firstNameChanged'
},
methods: {
firstNameChanged: function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
}
}</strong>5.帶命名空間的watch
watch選項(xiàng)中可以使用字符串表示要觀測(cè)的屬性,可以使用.來(lái)訪問(wèn)對(duì)象中的屬性,如'person.firstName',但是這樣會(huì)導(dǎo)致處理函數(shù)與屬性名稱緊密耦合,不便于維護(hù)。
為了解決這個(gè)問(wèn)題,Vue提供了一種帶命名空間的watch用法,這可以通過(guò)在watch選項(xiàng)中使用對(duì)象來(lái)實(shí)現(xiàn)。
對(duì)象的每個(gè)鍵都代表一個(gè)觀測(cè)的命名空間,值是觀測(cè)該命名空間下屬性的處理函數(shù)。例如:
<strong>watch: {
person: {
firstName: function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
},
lastName: function(newVal, oldVal) {
console.log('lastName changed:', newVal, oldVal);
}
}
}</strong>這里,我們可以為person對(duì)象指定兩個(gè)命名空間—firstName和lastName,這些命名空間被視為person層次結(jié)構(gòu)的子命名空間。
6.$watch
除了在組件選項(xiàng)中設(shè)置watch屬性之外,Vue還允許你使用實(shí)例方法$watch來(lái)實(shí)現(xiàn)相同的效果。
與組件選項(xiàng)中設(shè)置的watch選項(xiàng)不同,調(diào)用$watch時(shí)可以在任何地方使用,例如在計(jì)算屬性、方法或任何其他實(shí)例方法中。例如:
<strong>created() {
this.$watch('person.firstName', function(newVal, oldVal) {
console.log('firstName changed:', newVal, oldVal);
})
}</strong>7.深度觀測(cè)
在默認(rèn)情況下,watch只會(huì)觀測(cè)對(duì)象的第一層屬性的變化。這意味著在對(duì)象的嵌套層次結(jié)構(gòu)中更改屬性時(shí),不會(huì)觸發(fā)處理函數(shù)。要觀測(cè)對(duì)象的深層屬性,可以在watch選項(xiàng)中使用deep屬性,如下所示:
<strong>watch: {
'person.name': {
handler: function(newVal, oldVal) {
console.log('name changed:', newVal, oldVal);
},
deep: true
}
}</strong>在這個(gè)例子中,我們觀察person對(duì)象的name屬性,使用deep: true選項(xiàng)在對(duì)象深層次結(jié)構(gòu)中更改屬性時(shí)仍然能夠觸發(fā)處理函數(shù)。
綜上所述,Vue的watch選項(xiàng)提供了多種方法來(lái)觀測(cè)數(shù)據(jù)屬性的變化,讓我們能夠編寫更加優(yōu)雅和維護(hù)性更高的代碼。
到此這篇關(guān)于Vue中watch的多種使用方法的文章就介紹到這了,更多相關(guān)vue watch使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue使用watch同時(shí)監(jiān)聽(tīng)多個(gè)值的實(shí)現(xiàn)方法示例
- vue3下watch的使用方法示例
- Vue數(shù)據(jù)監(jiān)聽(tīng)器watch和watchEffect的使用
- 詳解Vue3中Watch監(jiān)聽(tīng)事件的使用
- Vue?watch監(jiān)聽(tīng)使用的幾種方法
- vue3界面使用router及使用watch監(jiān)聽(tīng)router的改變
- vue3如何使用watch監(jiān)聽(tīng)props中的數(shù)據(jù)
- Vue使用watch監(jiān)聽(tīng)數(shù)組或?qū)ο?/a>
相關(guān)文章
基于Vue3實(shí)現(xiàn)印章徽章組件的示例代碼
這篇文章主要介紹了如何利用vue3實(shí)現(xiàn)簡(jiǎn)單的印章徽章控件,文中通過(guò)示例代碼講解詳細(xì),需要的朋友們下面就跟隨小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
關(guān)于vue-router路由的傳參方式params query
這篇文章主要介紹了關(guān)于vue-router路由的傳參方式params query,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
vue element實(shí)現(xiàn)表格合并行數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了vue element實(shí)現(xiàn)表格合并行數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
Vue實(shí)現(xiàn)的父組件向子組件傳值功能示例
這篇文章主要介紹了Vue實(shí)現(xiàn)的父組件向子組件傳值功能,結(jié)合完整實(shí)例形式簡(jiǎn)單分析了vue.js組件傳值的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01
vue.js綁定事件監(jiān)聽(tīng)器示例【基于v-on事件綁定】
這篇文章主要介紹了vue.js綁定事件監(jiān)聽(tīng)器的方法,結(jié)合實(shí)例形式分析了vue.js基于v-on事件綁定響應(yīng)鼠標(biāo)點(diǎn)擊相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
vue-cli基礎(chǔ)配置及webpack配置修改的完整步驟
這篇文章主要給大家介紹了關(guān)于vue-cli基礎(chǔ)配置及webpack配置修改的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用vue-cli具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
在Vue3項(xiàng)目中安裝和配置Three.js的操作代碼
Three.js是一個(gè)輕量級(jí)的WebGL封裝庫(kù),用于在瀏覽器中渲染復(fù)雜的3D圖形,它提供了便捷的API,可以快速構(gòu)建3D場(chǎng)景、對(duì)象和動(dòng)畫,Vue.js是一個(gè)漸進(jìn)式JavaScript框架,擅長(zhǎng)構(gòu)建用戶界面,本文給大家介紹了在Vue3項(xiàng)目中安裝和配置Three.js的操作,需要的朋友可以參考下2024-12-12
vue實(shí)現(xiàn)圖片預(yù)覽放大以及縮小問(wèn)題
這篇文章主要介紹了vue實(shí)現(xiàn)圖片預(yù)覽放大以及縮小問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
VUE使用ElementUI下拉框 @change事件數(shù)據(jù)不回顯問(wèn)題
這篇文章主要介紹了VUE使用ElementUI下拉框 @change事件數(shù)據(jù)不回顯問(wèn)題。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02

