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