vue中watch的實(shí)際開發(fā)學(xué)習(xí)筆記
前言
本文主要是積累一下在使用前端的watch開發(fā)過(guò)程中遇到的問(wèn)題點(diǎn)和經(jīng)驗(yàn)。
一、watch是什么
根據(jù)本人的理解,它就是一個(gè)監(jiān)聽器,就是說(shuō)監(jiān)聽的某個(gè)數(shù)據(jù)發(fā)生了變化,那么它就會(huì)執(zhí)行相對(duì)應(yīng)的函數(shù)。它主要使用在哪些場(chǎng)景呢,比如:一個(gè)數(shù)據(jù)影響著多個(gè)數(shù)據(jù)的業(yè)務(wù)。
watch:{ // 當(dāng)這個(gè)workType發(fā)生改變時(shí),就是1個(gè)數(shù)據(jù)的改變,就會(huì)影響到type5和foll的改變 'queryParams.workType':function (newName,oldName){ if(newName==1){ this.type5 = this.type3, this.foll = true }else if(newName==2){ this.type5 = this.type4, this.foll = false } } },
二、watch不同的實(shí)際使用場(chǎng)景開發(fā)案例
1.場(chǎng)景1:加載完成后登錄監(jiān)聽
代碼如下:
watch: { isLoading (newVal, oldVal) { //1. 原來(lái)的值,和現(xiàn)在的值,是否有變化,如果有變化,觸發(fā)這個(gè)函數(shù) console.log('2 isLoading newVal is ', newVal, ' , oldVal is ', oldVal) //2. 當(dāng)加載完成時(shí), 還需要判斷用戶是否已登錄 const username = getLoginedUsername(this.$store) if (username != undefined && username != null) { // 已登錄時(shí), 跳轉(zhuǎn)首頁(yè) toHomePage(this) } } }, computed: { isLoading () { return isLoading(this.$store) } }, import { isLoading, getLoginedUsername } from 'utils/utils'
2.場(chǎng)景2:前面不同的選擇框,影響下面的不同的選擇框的選項(xiàng)內(nèi)容
1.data的代碼如下:
data() { return { verifyData: this.propData, editBoxShow: false, type3: [{ worksRegion: '0', label: '牛奶' },{ worksRegion:"1", label: "面包" }, { worksRegion:"3", label: "水果" } ], type4: [{ worksRegion: '0', label: '炸雞' },{ worksRegion:"1", label: "漢堡" },{ worksRegion:"2", label: "可樂(lè)" }, { worksRegion:"3", label: "北京烤鴨" } ], type5:[], queryParams:{ id:"", workType:'',//1開發(fā) , 2 測(cè)試 foll:true }, }; }
2.watch的監(jiān)聽
watch:{ // 當(dāng)這個(gè)workType發(fā)生改變時(shí),就是1個(gè)數(shù)據(jù)的改變,就會(huì)影響到type5和foll的改變 'queryParams.workType':function (newName,oldName){ if(newName==1){ this.type5 = this.type3, this.foll = true }else if(newName==2){ this.type5 = this.type4, this.foll = false } } },
3.場(chǎng)景效果描述
比如: 第1個(gè)選框:開發(fā);
第2個(gè)選框: A,B,C
比如: 第1個(gè)選框:測(cè)試;
第2個(gè)選框: A,B,C,D
由上所示,當(dāng)?shù)?個(gè)選框,選擇“開發(fā)”選項(xiàng)時(shí),則第2個(gè)選框出現(xiàn)的選項(xiàng)內(nèi)容為ABC;當(dāng)?shù)?個(gè)選框,選擇“測(cè)試”選項(xiàng)時(shí),則第2個(gè)選框出現(xiàn)的選項(xiàng)內(nèi)容為ABCD;這時(shí)就實(shí)現(xiàn)了當(dāng)初的上一個(gè)不同選項(xiàng)出現(xiàn)下一個(gè)不同的選項(xiàng)內(nèi)容的效果了。
原理描述:它是主要是通過(guò)判斷queryParams的里面的workType的參數(shù)的變化,來(lái)進(jìn)行監(jiān)聽的,如果當(dāng)用戶點(diǎn)了開發(fā)這個(gè)選項(xiàng),那么這個(gè)workType的newName就是1了,所以就觸發(fā)了watch里面的這個(gè)函數(shù)了,那么這里就可以進(jìn)行業(yè)務(wù)方面的處理即可。
3.場(chǎng)景3:深度監(jiān)聽
說(shuō)明: handler: 固定方法觸發(fā) deep: 開啟深度監(jiān)聽 immediate: 頁(yè)面初始化時(shí)handler立即執(zhí)行一次 data(){ return { user: { userNo: "", sex: "" } } }, // 監(jiān)聽整對(duì)象 watch: { // 監(jiān)聽整個(gè)對(duì)象,對(duì)象里的每個(gè)屬性值的變化都會(huì)執(zhí)行handler,執(zhí)行后獲取的 newVal 值和 oldVal 值是一樣的 user: { handler(newVal, oldVal){ console.log(newVal, oldVal); }, deep: true, immediate: true } } watch: { // 監(jiān)聽對(duì)象的某個(gè)屬性,被監(jiān)聽的屬性值發(fā)生變化就會(huì)執(zhí)行函數(shù),但獲取的 newVal 值和 oldVal 值不一樣 'user.userNo': { handler(newVal, oldVal){ console.log(newVal, oldVal); }, deep: true, immediate: true } }
4.場(chǎng)景4:賦值使用
watch: { traysNos (newVal, oldVal) { if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) { this.filterDeliverysOutLists = [] this.deliverysOutsList = this.fullsDeliverysOutsLists } } },
5.場(chǎng)景5:改變標(biāo)記的true和false
data () { return { loading: false, submitsCheck: true, } }, watch: { 'order.traysNos' (val) { if (val == null || val == '') { this.submitsCheck = true } else if (val) { this.submitsCheck = false } } },
6.場(chǎng)景6:頁(yè)面的跳轉(zhuǎn)
watch: { reservesNo (newVal, oldVal) { if ((newVal && !oldVal) || (newVal && oldVal && newVal !== oldVal)) { this.reservesNo = newVal // 獲取到新值 this.$router.replace({ // 跳轉(zhuǎn),注意,這種跳轉(zhuǎn),是不可以回退的 query: { reservesNo: this.reservesNo // 傳新值 } }) this.findOrderNo() // 執(zhí)行其他的函數(shù) } } },
這個(gè)主要是深度監(jiān)聽的使用,如何監(jiān)聽某個(gè)對(duì)象中的某個(gè)屬性的變化,就是上面這個(gè)案例,看業(yè)務(wù)需求來(lái)進(jìn)行使用。
補(bǔ)充:watch簡(jiǎn)寫形式
如果只是監(jiān)聽單個(gè)簡(jiǎn)單的數(shù)據(jù),使用watch的簡(jiǎn)寫形式就可以滿足需求。
代碼如下:
<script> export default { name: "Home", data() { return { text: "" }; }, watch: { text(newVal, oldVal) { } }, }; </script>
總結(jié)
本文主要是積累一下在使用前端的watch開發(fā)過(guò)程中遇到的問(wèn)題點(diǎn)和經(jīng)驗(yàn)。
到此這篇關(guān)于vue中watch的實(shí)際開發(fā)筆記的文章就介紹到這了,更多相關(guān)vue中watch開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue項(xiàng)目引入本地bootstrap不生效問(wèn)題及解決
這篇文章主要介紹了vue項(xiàng)目引入本地bootstrap不生效問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vue監(jiān)聽頁(yè)面上的報(bào)錯(cuò)信息
這篇文章主要介紹了vue監(jiān)聽頁(yè)面上的報(bào)錯(cuò)信息,window.onerror和window.addEventListener(‘error‘)的區(qū)別,需要的朋友可以參考下2023-10-10vue3集成Element-plus實(shí)現(xiàn)按需自動(dòng)引入組件的方法總結(jié)
vue3出來(lái)一段時(shí)間了,element也更新了版本去兼容vue3,下面這篇文章主要給大家介紹了關(guān)于vue3集成Element-plus實(shí)現(xiàn)按需自動(dòng)引入組件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07vue移動(dòng)端裁剪圖片結(jié)合插件Cropper的使用實(shí)例代碼
本篇文章主要介紹了vue移動(dòng)端裁剪圖片結(jié)合插件Cropper的使用實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07vue+elementUI實(shí)現(xiàn)表格關(guān)鍵字篩選高亮
這篇文章主要為大家詳細(xì)介紹了vue+elementUI實(shí)現(xiàn)表格關(guān)鍵字篩選高亮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Vue mixin實(shí)現(xiàn)組件功能復(fù)用示例詳解
這篇文章主要為大家介紹了Vue mixin實(shí)現(xiàn)組件功能復(fù)用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼
這篇文章主要介紹了Vue實(shí)現(xiàn)漸變色進(jìn)度條的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04