vue中watch監(jiān)聽器的觸發(fā)時機(watch的坑及解決)
watch監(jiān)聽器的觸發(fā)時機
起因
我需要在頁面created時獲得商家的類型id值,然后監(jiān)聽id值,動態(tài)的改變請求接口的地址。請求接口的函數(shù)在mounted中執(zhí)行。業(yè)務(wù)邏輯寫完后發(fā)現(xiàn),頁面在第一次加載時,接口沒有數(shù)據(jù),原因接口地址為空,即接口地址沒有改變。
代碼
created() { this.typeId = this.$route.params.id; console.log("this.typeId的值發(fā)生改變,觸發(fā)watch"); }, mounted() { console.log(this.typeUrl, "mounted中的typeUrl的值"); //訪問接口的函數(shù) this.getData(); },
watch
watch: { // 監(jiān)聽訂單類型 給出對應(yīng)面包屑 typeId: function (val) { if (val == 1) { console.log("watch觸發(fā)了"); this.selfBreadcrumb[1].name = "核銷訂單"; this.typeUrl = "settlements"; console.log(this.typeUrl, "這里是watch"); } else if (val == 2) { this.selfBreadcrumb[1].name = "物流訂單"; this.typeUrl = "logistics-orders"; } else if (val == 4) { this.selfBreadcrumb[1].name = "外賣訂單"; this.typeUrl = "takeout-orders"; } },
控制臺
說明
watch的觸發(fā)會在created和mounted結(jié)束后。
先占個坑,具體原理如何只有等我項目完成了再來康康。
vue watch的理解小記
剛開始學時,感覺自己懂了??墒堑接脮r才發(fā)現(xiàn)自己是渣渣中的渣渣。。。
想通過路由id的變化來改變組件的加載數(shù)據(jù)時,遇到了一個問題,就是,組件不會重新渲染。一臉懵逼了,,,
找到了watch的監(jiān)控方法時,又用不好??劭蹠昧艘恍?,趕緊記下來。
首先確認 watch是一個對象,一定要當成對象來用。
對象就有鍵,有值。
- 鍵:就是你要監(jiān)控的那個家伙,比如說$route,這個就是要監(jiān)控路由的變化。或者是data中的某個變量。
- 值可以是函數(shù):就是當你監(jiān)控的家伙變化時,需要執(zhí)行的函數(shù),這個函數(shù)有兩個形參,第一個是當前值,第二個是變化后的值。
- 值也可以是函數(shù)名:不過這個函數(shù)名要用單引號來包裹。
第三種情況厲害了。
值是包括選項的對象:選項包括有三個。
- 第一個handler:其值是一個回調(diào)函數(shù)。即監(jiān)聽到變化時應(yīng)該執(zhí)行的函數(shù)。
- 第二個是deep:其值是true或false;確認是否深入監(jiān)聽。(一般監(jiān)聽時是不能監(jiān)聽到對象屬性值的變化的,數(shù)組的值變化可以聽到。)
- 第三個是immediate:其值是true或false;確認是否以當前的初始值執(zhí)行handler的函數(shù)。
var vm = new Vue({ ? data: { ? ? a: 1, ? ? b: 2 ? }, ? watch: { ? ? a: function (val, oldVal) { ? ? ? console.log('new: %s, old: %s', val, oldVal) ? ? }, ? ? // 方法名 ? ? b: 'someMethod', ? ? // 選項的對象 ? ? c: { ? ? ? handler: function (val, oldVal) { /* ... */ }, ? ? ? deep: true, ? ? ? immediate: true ? ? } ? } })
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue Echarts實現(xiàn)圖表輪播圖以及圖表組件封裝和節(jié)流函數(shù)優(yōu)化講解
這篇文章主要介紹了在Vue中優(yōu)雅的使用Echarts實現(xiàn)圖表輪播圖、Echarts圖表組件封裝、節(jié)流函數(shù)優(yōu)化圖表性能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-01-01Vue?socket.io模塊實現(xiàn)聊天室流程詳解
vue-socket.io其實是在socket.io-client(在瀏覽器和服務(wù)器之間實現(xiàn)實時、雙向和基于事件的通信)基礎(chǔ)上做了一層封裝,將socket掛載到vue實例上,同時可使用sockets對象輕松實現(xiàn)組件化的事件監(jiān)聽,在vue項目中使用起來更方便2022-12-12vue中$set的使用(結(jié)合在實際應(yīng)用中遇到的坑)
這篇文章主要介紹了vue中$set的使用(結(jié)合在實際應(yīng)用中遇到的坑),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07