VUE watch監(jiān)聽(tīng)器的基本使用方法詳解
偵聽(tīng)器一般來(lái)說(shuō)是用來(lái)監(jiān)聽(tīng)數(shù)據(jù)的變化,默認(rèn)是在數(shù)據(jù)發(fā)生變化時(shí)執(zhí)行。
監(jiān)聽(tīng)的數(shù)據(jù)名放到這里面作為函數(shù)名,這個(gè)函數(shù)里面有兩個(gè)參數(shù),一個(gè)是新值,一個(gè)是舊值。
在vue中,使用watch來(lái)響應(yīng)數(shù)據(jù)的變化,關(guān)于watch的用法大致有三種。
1、下面代碼是watch的一種簡(jiǎn)單的用法
<div id="app">
<input type="text" v-model="firstName" />
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var vm=new Vue({
el:"#app",
data:{
firstName:"張"
},
watch:{
firstName:(newVal,oldVal){
//firstName即為你想監(jiān)聽(tīng)的數(shù)據(jù)的名稱,要監(jiān)聽(tīng)誰(shuí)函數(shù)名就用誰(shuí)的 如監(jiān)聽(tīng)v-model的firstName
//newVal:表示改變后的值,即第一個(gè)形參,不要調(diào)換位置
//oldVal:表示改變前的值,
console.log({newVal,oldVal}); // {newVal: "陳", oldVal: "張"}
}
//直接寫(xiě)一個(gè)監(jiān)聽(tīng)處理函數(shù),當(dāng)每次監(jiān)聽(tīng)到cityName值發(fā)生改變時(shí),執(zhí)行函數(shù)。
//也可以在所監(jiān)聽(tīng)的數(shù)據(jù)后面直接加字符串形式的方法名:firstName: 'nameChange'
},
methods:{
nameChange(){
}
}
})
vm.firstName = "陳";//改變監(jiān)聽(tīng)的值
</script>
2、immediate 立即監(jiān)聽(tīng)
使用watch基本用法時(shí)有一個(gè)特點(diǎn),就是當(dāng)值第一次綁定的時(shí)候,不會(huì)執(zhí)行監(jiān)聽(tīng)函數(shù),只有值發(fā)生改變才會(huì)執(zhí)行。如果我們需要在最初綁定值的時(shí)候也執(zhí)行函數(shù),則就需要用到immediate屬性。
watch: {
firstName: {
handler(newName, oldName) {
this.fullName = newName + ' ' + this.lastName;
},
{ immediate: true }
}
}
監(jiān)聽(tīng)的數(shù)據(jù)后面寫(xiě)成對(duì)象形式,包含handler方法和immediate,上面簡(jiǎn)單的寫(xiě)法我們寫(xiě)的函數(shù)其實(shí)就是在寫(xiě)這個(gè)handler方法、默認(rèn)省略而已。
3、handler方法
<div id="app">
<div>
<p>Number: {{ myNumber }}</p>
<p>Number: <input type="text" v-model.number="myNumber"></p>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
new Vue({
el: '#app',
data: {
myNumber: 'Dawei'
},
watch: {
myNumber: {
handler(newVal, oldVal) {
console.log('newVal', newVal);
console.log('oldVal', oldVal);
},
//immediate為true時(shí)則立即觸發(fā)回調(diào)函數(shù);如果為false,則和上面的例子一樣,不會(huì)立即執(zhí)行回調(diào)。
immediate: true
}
}
})
</script>
//handler方法就是你watch中需要具體執(zhí)行的方法
4、 deep屬性
對(duì)于對(duì)象或者對(duì)象中的屬性,我們?nèi)绾伪O(jiān)聽(tīng)?那么就介紹deep屬性。它的作用就是解決這個(gè)問(wèn)題的關(guān)鍵。
<div id="root">
<p>obj.a: {{obj.a}}</p>
<p>obj.a: <input type="text" v-model="obj.a"></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
new Vue({
el: '#root',
data: {
obj: {
a: 123
}
},
watch: {
obj: {
handler(newName, oldName) {
console.log(newName, oldName);
},
immediate: true,
deep:true
}
}
})
</script>
上面的代碼如果不加deep:true 那么console中就不會(huì)執(zhí)行,只執(zhí)行第一次,輸出結(jié)果為undefined
默認(rèn)情況下 handler 只監(jiān)聽(tīng)obj這個(gè)屬性它的引用的變化,我們只有給obj賦值的時(shí)候它才會(huì)監(jiān)聽(tīng)到。
這個(gè)時(shí)候就可以使用deep深入觀察,監(jiān)聽(tīng)器會(huì)一層層的往下遍歷,給對(duì)象的所有屬性都加上這個(gè)監(jiān)聽(tīng)器,但是這樣消耗過(guò)大。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
vue中調(diào)用HTTP請(qǐng)求的詳細(xì)步驟
這篇文章主要介紹了vue中調(diào)用HTTP請(qǐng)求的詳細(xì)步驟,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定幫助,需要的朋友可以參考下2024-07-07
Vue動(dòng)態(tài)類的幾種使用方法總結(jié)
這篇文章主要介紹了Vue動(dòng)態(tài)類的幾種使用方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
vue+echarts實(shí)現(xiàn)條紋柱狀橫向圖
這篇文章主要為大家詳細(xì)介紹了vue+echarts實(shí)現(xiàn)條紋柱狀橫向圖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
解決vue 使用axios.all()方法發(fā)起多個(gè)請(qǐng)求控制臺(tái)報(bào)錯(cuò)的問(wèn)題
這篇文章主要介紹了解決vue 使用axios.all()方法發(fā)起多個(gè)請(qǐng)求控制臺(tái)報(bào)錯(cuò)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
vue中的watch監(jiān)聽(tīng)數(shù)據(jù)變化及watch中各屬性的詳解
這篇文章主要介紹了vue中的watch監(jiān)聽(tīng)數(shù)據(jù)變化及watch中的immediate、handler和deep屬性詳解,本文大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-09-09
Vue?vant-ui框架實(shí)現(xiàn)上拉加載下拉刷新功能
功能需求——獲取后端接口返回的數(shù)據(jù),實(shí)現(xiàn)列表數(shù)據(jù)上滑加載更多下一頁(yè)數(shù)據(jù),下拉數(shù)據(jù)刷新功能,結(jié)合vant-ui框架實(shí)現(xiàn)??芍苯訁⒖际褂?/div> 2022-09-09
Vue中JSON文件神奇應(yīng)用fetch、axios異步加載與模塊導(dǎo)入全指南詳細(xì)教程
在Vue中使用JSON文件有多種方式,包括使用fetch方法加載JSON文件、使用axios庫(kù)加載JSON文件,以及將JSON文件導(dǎo)入為模塊,這篇文章主要介紹了Vue中JSON文件神奇應(yīng)用fetch、axios異步加載與模塊導(dǎo)入全指南詳細(xì)教程,需要的朋友可以參考下2024-01-01
vue如何通過(guò)button的disabled控制按鈕能否被使用
這篇文章主要介紹了vue如何通過(guò)button的disabled控制按鈕能否被使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04
vue項(xiàng)目使用typescript創(chuàng)建抽象類及其使用方式
這篇文章主要介紹了vue項(xiàng)目使用typescript創(chuàng)建抽象類及其使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03最新評(píng)論

