Vue監(jiān)聽屬性圖文實例詳解
?什么是監(jiān)聽屬性?
??所謂監(jiān)聽就是對內置對象的狀態(tài)或者屬性變化進行監(jiān)聽并且做出反應的響應,監(jiān)聽屬性,意思就是可以監(jiān)視其他數(shù)據(jù)的變化。
監(jiān)聽屬性和計算屬性的區(qū)別?
計算屬性是依賴的值改變后重新計算結果更新DOM,會進行緩存。
屬性監(jiān)聽的是屬性值,當定義的值發(fā)生變化時,執(zhí)行相對應的函數(shù)。
最主要的用途區(qū)別:
計算屬性不能執(zhí)行異步任務。計算屬性一般不會用來向服務器請求或者執(zhí)行異步任務,因為耗時可能會比較長,我們的計算屬性要實時更新。所以這個異步任務就可以用監(jiān)聽屬性來做。
總之一句話:computed能實現(xiàn)的,watch都能實現(xiàn),computed不能實現(xiàn)的,watch也能實現(xiàn)
監(jiān)聽屬性的使用
使用watch配置項,在配置項里面寫上要監(jiān)視的屬性,每次屬性值的變化都會觸發(fā)handler函數(shù)回調,也可以監(jiān)視計算屬性的變化。
例子:
監(jiān)視輸入框的變化
代碼
<template> <div class="main"> 我:<el-input v-model="name" placeholder="請輸入名字"></el-input> 好友1<el-input v-model="friends.friend_1" placeholder="請輸入名字"></el-input> 好友2<el-input v-model="friends.friend_2" placeholder="請輸入名字"></el-input> </div> </template> <script> export default { data(){ return{ name:'浪漫主義碼農(nóng)', friends:{friend_1:'張三',friend_2:'李四'} } }, watch:{ name:{ handler(newValue,oldValue){ //newValue 新的值,oldValue變化前的值 console.log(newValue,oldValue) this.friends.friend_1='王五' } }, //監(jiān)視多級結構中某個屬性的變化 'friends.friend_1':{ handler(newValue,oldValue){ console.log(newValue,oldValue) } }, 'friends.friend_2':{ handler(newValue,oldValue){ console.log(newValue,oldValue) } }, } }; </script>
深度監(jiān)聽
當我們的對象有多層結構的時候,我們要監(jiān)聽的對象的屬性很多,避免一個一個屬性單獨寫,這個時候用到深度監(jiān)聽。
在watch配置中,監(jiān)視屬性對象中,配置deep 設置為 true 用于監(jiān)聽多級對象或者數(shù)組內部值的變化
watch:{ //監(jiān)視多級結構中所有屬性的變化 friends:{ handler(newValue,oldValue){ console.log(newValue,oldValue,"aa") }, deep:true, //開啟深度監(jiān)聽 } }
注意:這里有個問題,深度監(jiān)聽時會出現(xiàn)新舊值相同的現(xiàn)象?
原因:
官方的解釋:
在變異(不是替換)對象或數(shù)組時,舊值將與新值相同,因為它們的引用指向同一個對象/數(shù)組。Vue不會保留變異之前值的副本
就是導致了指針的變化。在我的js深拷貝你還不會嗎 文章里講到數(shù)據(jù)的存儲
立即調用
和deep配置的地方一樣。
immediate 設置為 true 將立即以觸發(fā)當前handler回調
watch:{ name:{ handler(newValue,oldValue){ //newValue 新的值,oldValue變化前的值 console.log(newValue,oldValue) this.friends.friend_1='王五' }, immediate:true }, }
在頁面加載的時候就執(zhí)行了一次,所以舊數(shù)據(jù)為undefined
寫在最后
watch監(jiān)聽屬性通??梢杂迷?數(shù)據(jù)持久化、派發(fā)事件并同步/異步執(zhí)行,驗證格式...
到此這篇關于Vue監(jiān)聽屬性的文章就介紹到這了,更多相關Vue監(jiān)聽屬性內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
vue Cli 環(huán)境刪除與重裝教程 - 版本文檔
這篇文章主要介紹了vue Cli 環(huán)境刪除與重裝教程 - 版本文檔,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue3中如何使用v-model高級用法參數(shù)綁定傳值
本文給大家介紹Vue3中使用v-model高級用法參數(shù)綁定傳值的相關知識,包括單個輸入框傳值和多個輸入框傳值,一個組件接受多個v-model值,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧2023-10-10手寫實現(xiàn)vue2下拉菜單dropdown組件實例
這篇文章主要為大家介紹了手寫vue2下拉菜單dropdown組件實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08