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