Vue項目中數(shù)據(jù)的深度監(jiān)聽或?qū)ο髮傩缘谋O(jiān)聽實例
眾所周知,vue項目中對數(shù)據(jù)的監(jiān)聽,提供了一個很好的鉤子watch,watch可以極其方便的監(jiān)聽我們常用數(shù)據(jù)類型值的變化,但通常當(dāng)我們想監(jiān)聽一個對象中,某個屬性值的變化時,很難達到我們預(yù)期的效果。根據(jù)vue的文檔,不難發(fā)現(xiàn),使用數(shù)據(jù)的深度監(jiān)聽來達到這一效果。具體實現(xiàn)如下:
watch: { evlist: { handler(val, oldVal) { this.isTeam = val.projectParty; this.pjtid = val.pjtid; this.isFinish = val.projectSelfValue; }, deep: true }, },
這其中,evlist是一個對象,val監(jiān)聽到變化后的值,oldVal是變化前的值。
補充知識:vue中的監(jiān)聽屬性和計算屬性
計算屬性(computed)
vue中的計算屬性是非常棒的東西,它兼具了邏輯和變量??梢宰屛覀儾辉訇P(guān)注視圖層,值關(guān)注代碼的邏輯即可。至于數(shù)據(jù)如何展現(xiàn)則只需由Vue負責(zé),不需要我們的參與。
所以如果在面臨選擇是使用計算屬性還是監(jiān)視屬性的情況下,優(yōu)先選擇計算屬性
<p>Original message: "{{ message }}"</p> <p>Computed reversed message: "{{ reversedMessage }}"</p> </div> export default { data(){ return { message: 'Hello', } }, computed: { reversedMessage: function () { return this.message.split('').reverse().join(''); } }
可以看到我們使用的計算屬性替代了模板內(nèi)表達式的功能。所以,對于任何復(fù)雜邏輯,你都應(yīng)當(dāng)使用計算屬性。而且計算屬性讓我們只關(guān)注于邏輯實現(xiàn),至于后期的數(shù)據(jù)在界面上的表示形式則直接由Vue.js負責(zé),讀者可以看到我們并沒有直接參與頁面展示上面來
此外,傳統(tǒng)的直接通過表達式求值的方式需要我們自行取值,而計算屬性是基于它們的依賴進行緩存的。只在相關(guān)依賴發(fā)生改變時它們才會重新求值。也就是說,計算屬性會直接從緩存拿值,并伴隨著值的改變而改變。而傳統(tǒng)的直接通過表達式求值的方式需要我們在拿值之前需要執(zhí)行一次getter()函數(shù)
監(jiān)聽屬性(watch)
監(jiān)聽屬性其實質(zhì)是一次異步回調(diào),希望讀者在想到使用監(jiān)聽屬性之前多考慮能否采用計算屬性來取代監(jiān)聽屬性
對比同一個功能實現(xiàn)
//計算屬性 computed: { fullName2: function () { return this.firstName + ' ' + this.lastName } } //監(jiān)聽屬性 watch: { firstName: function (val) { this.fullName = val + ' ' + this.lastName }, lastName: function (val) { this.fullName = this.firstName + ' ' + val } }
可以看到計算屬性的代碼更加簡潔也更加高效,而且就實現(xiàn)效果而言,明顯計算屬性會更好一點
以上這篇Vue項目中數(shù)據(jù)的深度監(jiān)聽或?qū)ο髮傩缘谋O(jiān)聽實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue3-print-nb實現(xiàn)頁面打印(含分頁打印)示例代碼
大多數(shù)后臺系統(tǒng)中都存在打印的需求,在有打印需求時,對前端來說當(dāng)然是直接打印頁面更容易,下面這篇文章主要給大家介紹了關(guān)于vue3-print-nb實現(xiàn)頁面打印(含分頁打印)的相關(guān)資料,需要的朋友可以參考下2024-01-01vue props對象validator自定義函數(shù)實例
今天小編就為大家分享一篇vue props對象validator自定義函數(shù)實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue?element?ui表格相同數(shù)據(jù)合并單元格效果實例
工作中遇到需要根據(jù)單元格某個屬性合并,特此記錄下,下面這篇文章主要給大家介紹了關(guān)于vue?element?ui表格相同數(shù)據(jù)合并單元格效果的相關(guān)資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2023-11-11vue?this.$router和this.$route區(qū)別解析及路由傳參的2種方式?&&?this.$route
this.$router?相當(dāng)于一個全局的路由器對象,包含了很多屬性和對象(比如?history?對象),任何頁面都可以調(diào)用其?push(),?replace(),?go()?等方法,本文給大家介紹Vue中this.$router與this.$route的區(qū)別?及push()方法,感興趣的朋友跟隨小編一起看看吧2023-10-10vue3+elementplus基于el-table-v2封裝公用table組件詳細代碼
在日常開發(fā)后端管理系統(tǒng)項目中,用于展示數(shù)據(jù)多會用表格進行展示,下面這篇文章主要給大家介紹了關(guān)于vue3+elementplus基于el-table-v2封裝公用table組件的相關(guān)資料,需要的朋友可以參考下2023-12-12