vue監(jiān)視器@Watch創(chuàng)建執(zhí)行immediate方式
vue監(jiān)視器@Watch創(chuàng)建執(zhí)行immediate
vue監(jiān)視器@Watch的immediate參數(shù),表示在watch中首次綁定的時(shí)候,是否執(zhí)行handler函數(shù),
1.值為true則表示在watch中聲明的時(shí)候,就立即執(zhí)行handler方法,
2.值為false,則和一般使用watch一樣,在數(shù)據(jù)發(fā)生變化的時(shí)候才執(zhí)行handler。
async created() {
// await this.refreshMessageBody()
}
@Watch('message',{
immediate:true,
// immediate表示在watch中首次綁定的時(shí)候,是否執(zhí)行handler,
// 值為true則表示在watch中聲明的時(shí)候,就立即執(zhí)行handler方法,
// 值為false,則和一般使用watch一樣,在數(shù)據(jù)發(fā)生變化的時(shí)候才執(zhí)行handler。
})
async refreshMessageBody(){
console.log("message改變了");
await this.func1();
await this.func2();
}
vue監(jiān)視屬性(watch)
監(jiān)視屬性
監(jiān)視屬性watch:
1.當(dāng)被監(jiān)視的屬性變化時(shí),回調(diào)函數(shù)自動(dòng)調(diào)用,進(jìn)行相關(guān)操作
2.監(jiān)視的屬性必須存在,才能進(jìn)行監(jiān)視
3.監(jiān)視的兩種寫法:
- new Vue時(shí)傳入watch屬性
- 通過app.$watch監(jiān)視
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>監(jiān)視</title>
<script src="../js/vue.min.js"></script>
</head>
<body>
<div id="app">
<!--第一種寫法-->
<h2>今天天氣很{{isHot ? '炎熱':'涼爽'}}</h2>
<!--第二種寫法:通過計(jì)算屬性-->
<h2>今天天氣很{{info}}</h2>
<!--綁定methods的方法-->
<button @click="change">點(diǎn)擊切換天氣</button>
<!--離譜寫法:適用于簡單測試-->
<button @click="isHot = !isHot">點(diǎn)擊切換天氣</button>
</div>
<script>
let app = new Vue({
el: '#app',
data: {
isHot: true
},
methods: {
change: function (){
this.isHot = !this.isHot
}
},
computed: {
info: {
get: function (){
if (this.isHot==true){
return '炎熱'
}else{
return '涼爽'
}
},
set: function (){
this.isHot = !this.isHot
}
}
},
watch: {
//監(jiān)視誰
isHot: {
//什么時(shí)候調(diào)用?當(dāng)isHot改變
handler(newValue,oldValue) {
console.log('isHot被修改惹',newValue,oldValue)
},
//初始化時(shí)讓handler調(diào)用一下
immediate: true
}
}
})
//可以替換上面的watch屬性
app.$watch('isHot',{
//什么時(shí)候調(diào)用?當(dāng)isHot改變
handler(newValue,oldValue) {
console.log('isHot被修改惹',newValue,oldValue)
},
//初始化時(shí)讓handler調(diào)用一下
immediate: true
})
</script>
</body>
</html>深度監(jiān)視
深度監(jiān)視:
? 1.vue中的watch默認(rèn)不監(jiān)測對(duì)象內(nèi)部值的改變(一層)
? 2.配置deep:true可以檢測對(duì)象內(nèi)部值改變(多層次)
備注:
? 1.vue自身可以監(jiān)測對(duì)象內(nèi)部值的改變,但vue提供的watch默認(rèn)不可以
? 2.使用watch時(shí)根據(jù)數(shù)據(jù)的具體結(jié)構(gòu),決定是否采用深度監(jiān)視
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>監(jiān)視簡寫形式</title>
<script src="../js/vue.min.js"></script>
</head>
<body>
<div id="app">
<h2>今天天氣很{{isHot ? '炎熱':'涼爽'}}</h2>
<button @click="change">點(diǎn)擊切換天氣</button>
</div>
<script>
let app = new Vue({
el: '#app',
data: {
isHot: true,
numbers: {
a: 1,
b: 2
}
},
methods: {
change: function (){
this.isHot = !this.isHot
}
},
computed: {
info: {
get: function (){
if (this.isHot==true){
return '炎熱'
}else{
return '涼爽'
}
},
set: function (){
this.isHot = !this.isHot
}
}
},
watch: {
//完整寫法
// isHot: {
// // deep: true,深度監(jiān)視
// handler(newValue,oldValue) {
// console.log('isHot被修改惹',newValue,oldValue)
// },
// //初始化時(shí)讓handler調(diào)用一下
// // immediate: true
// },
//簡寫
isHot(newValue,oldValue){
console.log('isHot被修改了',newValue,oldValue)
}
}
})
//完整寫法
app.$watch('isHot',{
//什么時(shí)候調(diào)用?當(dāng)isHot改變
handler(newValue,oldValue) {
console.log('isHot被修改惹',newValue,oldValue)
},
//初始化時(shí)讓handler調(diào)用一下
immediate: true
})
//不允許寫箭頭函數(shù),會(huì)導(dǎo)致this指向的不是app,
// vue管理的函數(shù)(methods中的,computed,watch中的)都得寫普通函數(shù),
// 不能寫es6里的箭頭函數(shù)
app.$watch('isHot',function(newValue,oldValue) {
console.log('isHot被修改惹',newValue,oldValue)
})
</script>
</body>
</html>監(jiān)視效果:

computed VS watch
計(jì)算屬性在大多數(shù)情況下更合適,但有時(shí)也需要一個(gè)自定義的偵聽器。
這就是為什么 Vue 通過 watch 選項(xiàng)提供了一個(gè)更通用的方法,來響應(yīng)數(shù)據(jù)的變化。
當(dāng)需要在數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作時(shí),這個(gè)方式是最有用的
computed與watch區(qū)別
- computed能完成的功能,watch都可以完成
- watch能完成的功能,computed不一定能完成,例如:watch可以進(jìn)行異步操作
注意:
- 所被Vue管理的函數(shù),最好寫成普通函數(shù),這樣this的指向才是vue實(shí)例對(duì)象或組件實(shí)例對(duì)象
- 所有不被Vue所管理的函數(shù)(定時(shí)器的回調(diào)函數(shù)、ajax的回調(diào)函數(shù)等),最好寫成箭頭函數(shù),這樣this的指向才是vue的實(shí)例或組件的實(shí)例對(duì)象
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue表單提交點(diǎn)擊事件只允許點(diǎn)擊一次的實(shí)例
這篇文章主要介紹了Vue表單提交點(diǎn)擊事件只允許點(diǎn)擊一次的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
vue data變量相互賦值后被實(shí)時(shí)同步的解決步驟
這篇文章主要介紹了vue data變量相互賦值后被實(shí)時(shí)同步的解決步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-08-08
vue3:vue2中protoType更改為config.globalProperties問題
這篇文章主要介紹了vue3:vue2中protoType更改為config.globalProperties問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
使用Vue進(jìn)行數(shù)據(jù)可視化實(shí)踐分享
在當(dāng)今的數(shù)據(jù)驅(qū)動(dòng)時(shí)代,數(shù)據(jù)可視化變得越來越重要,它能夠幫助我們更直觀地理解數(shù)據(jù),從而做出更好的決策,在這篇博客中,我們將探索如何使用 Vue 和一些常見的圖表庫(如 Chart.js)來制作漂亮的數(shù)據(jù)可視化效果,需要的朋友可以參考下2024-10-10
Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能
這篇文章主要介紹了Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能,倒計(jì)時(shí)的運(yùn)用場景是獲取手機(jī)驗(yàn)證碼倒計(jì)時(shí)、獲取郵箱驗(yàn)證碼倒計(jì)時(shí)等場景,本文結(jié)合示例代碼給大家詳細(xì)講解,需要的朋友可以參考下2023-01-01
vue.js 初體驗(yàn)之Chrome 插件開發(fā)實(shí)錄
這篇文章主要介紹了vue.js 初體驗(yàn)之Chrome 插件開發(fā)實(shí)錄 ,需要的朋友可以參考下2017-05-05
vue-resource?獲取本地json數(shù)據(jù)404問題的解決
這篇文章主要介紹了vue-resource?獲取本地json數(shù)據(jù)404問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10

