watch(監(jiān)視屬性)和computed(計(jì)算屬性)的區(qū)別及實(shí)現(xiàn)案例
前言
watch 和 computed 是vue實(shí)例對象中的兩個(gè)重要屬性,watch是監(jiān)視屬性,用來監(jiān)視vue實(shí)例對象上屬性和方法的變化,computed被稱為計(jì)算屬性,可以將data對象中的屬性進(jìn)行計(jì)算得到新的屬性;由于watch屬性監(jiān)視data對象中的屬性變化時(shí),也能拿到data對象中的屬性進(jìn)行計(jì)算;因此產(chǎn)生疑問既然兩者都能實(shí)現(xiàn)同一功能,兩者有什么區(qū)別呢?下面將以此疑問為突破點(diǎn)結(jié)合實(shí)例詳述兩者的區(qū)別;
watch 實(shí)現(xiàn)案例
<!-- 準(zhǔn)備好一個(gè)容器--> <div id="root"> 姓:<input type="text" v-model="firstName" /> <br /><br /> 名:<input type="text" v-model="lastName" /> <br /><br /> 全名:<span>{{fullName}}</span> <br /><br /> </div> </body> <script type="text/javascript"> Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。 const vm = new Vue({ el: '#root', data: { firstName: '張', lastName: '三', fullName: '張-三', }, watch: { firstName(val) { setTimeout(() => { this.fullName = val + '-' + this.lastName }, 1000) }, lastName(val) { setTimeout(() => { this.fullName = this.firstName + '-' + val }, 1000) }, }, }) </script>
以上為watch通過監(jiān)視data中的firstName和lastName的變化改變fullName
computed 實(shí)現(xiàn)案例
<body> <!-- 準(zhǔn)備好一個(gè)容器--> <div id="root"> 姓:<input type="text" v-model="firstName" /> <br /><br /> 名:<input type="text" v-model="lastName" /> <br /><br /> 全名:<span>{{fullName}}</span> <br /><br /> </div> </body> <script type="text/javascript"> Vue.config.productionTip = false //阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示。 const vm = new Vue({ el: '#root', data: { firstName: '張', lastName: '三', }, computed: { fullName() { return this.firstName + '-' + this.lastName }, }, })
以上為通過computed計(jì)算屬性實(shí)現(xiàn)fullName和firstName、lastName產(chǎn)生聯(lián)系;
對比
通過對比可以看出,watch和computed都能實(shí)現(xiàn)相同的功能,但是首先第一眼看去,computed計(jì)算屬性實(shí)現(xiàn)的案例明顯代碼更少更精簡;但是watch能將fullName的變化改成異步;因此對watch和computed屬性做出如下總結(jié):
1、computed能完成的功能watch也能完成
2、watch能完成的功能computed不一定能完成,比如watch可以進(jìn)行異步操作;
??注意:
1.所被Vue管理的函數(shù),最好寫成普通函數(shù),這樣this的指向才是vm 或 組件實(shí)例對象。
2.所有不被Vue所管理的函數(shù)(定時(shí)器的回調(diào)函數(shù)、ajax的回調(diào)函數(shù)等、Promise的回調(diào)函數(shù)),最好寫成箭頭函數(shù),這樣this的指向才是vm 或 組件實(shí)例對象。
到此這篇關(guān)于watch(監(jiān)視屬性)和computed(計(jì)算屬性)的區(qū)別的文章就介紹到這了,更多相關(guān)watch(監(jiān)視屬性)和computed(計(jì)算屬性)的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue中使用v-if隱藏元素時(shí)會(huì)出現(xiàn)閃爍問題的解決
這篇文章主要介紹了vue中使用v-if隱藏元素時(shí)會(huì)出現(xiàn)閃爍問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04vue中動(dòng)態(tài)路由加載組件,找不到module問題及解決
這篇文章主要介紹了vue中動(dòng)態(tài)路由加載組件,找不到module問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06vue基礎(chǔ)之事件簡寫、事件對象、冒泡、默認(rèn)行為、鍵盤事件實(shí)例分析
這篇文章主要介紹了vue基礎(chǔ)之事件簡寫、事件對象、冒泡、默認(rèn)行為、鍵盤事件,結(jié)合實(shí)例形式分析了vue.js事件簡寫、冒泡及阻止冒泡等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03IOS上微信小程序密碼框光標(biāo)離開提示存儲(chǔ)密碼的完美解決方案
ios密碼框輸入密碼光標(biāo)離開之后會(huì)提示存儲(chǔ)密碼的彈窗,關(guān)于這樣的問題怎么解決呢,下面給大家分享IOS上微信小程序密碼框光標(biāo)離開提示存儲(chǔ)密碼的完美解決方案,感興趣的朋友一起看看吧2024-07-07vue結(jié)合leaflet實(shí)現(xiàn)鷹眼圖
本文主要介紹了vue結(jié)合leaflet實(shí)現(xiàn)鷹眼圖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06Vue3+Element?Plus使用svg加載iconfont的處理方法
這篇文章主要介紹了Vue3+Element?Plus使用svg加載iconfont的解決方案,本文詳細(xì)介紹了如何在Element?Plus中使用iconfont,簡單的說就是要將其封裝成SVG,并且支持動(dòng)態(tài)修改顏色,需要的朋友可以參考下2022-08-08