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