最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

vue中使用refs定位dom出現(xiàn)undefined的解決方法

來源:懂視網(wǎng) 責(zé)編:小采 時間:2020-11-27 22:23:07
文檔

vue中使用refs定位dom出現(xiàn)undefined的解決方法

vue中使用refs定位dom出現(xiàn)undefined的解決方法:之前在公司做項(xiàng)目,一直感覺用ref來定位dom節(jié)點(diǎn)挺方便的。但是期間遇到了一個問題,就是在mounted(){}鉤子里面使用this.$refs.xxx,打印出來的卻是undefined? 于是我就對比了一下之前使用ref定位的.vue文件,發(fā)現(xiàn)了他們之間的區(qū)別。 我們要想知道為什么會定
推薦度:
導(dǎo)讀vue中使用refs定位dom出現(xiàn)undefined的解決方法:之前在公司做項(xiàng)目,一直感覺用ref來定位dom節(jié)點(diǎn)挺方便的。但是期間遇到了一個問題,就是在mounted(){}鉤子里面使用this.$refs.xxx,打印出來的卻是undefined? 于是我就對比了一下之前使用ref定位的.vue文件,發(fā)現(xiàn)了他們之間的區(qū)別。 我們要想知道為什么會定

之前在公司做項(xiàng)目,一直感覺用ref來定位dom節(jié)點(diǎn)挺方便的。但是期間遇到了一個問題,就是在mounted(){}鉤子里面使用this.$refs.xxx,打印出來的卻是undefined?

于是我就對比了一下之前使用ref定位的.vue文件,發(fā)現(xiàn)了他們之間的區(qū)別。

我們要想知道為什么會定位不到某個DOM節(jié)點(diǎn),我們首先要理解mounted(){}這個鉤子函數(shù)是用來做什么的。

下面是vue官方給出的vue生命周期(部分),正如官方所說的一樣,一開始不必先理解,不過隨這你的學(xué)習(xí)與使用,他的參考價值會越來越高。

 

原來,mounted階段,DOM結(jié)構(gòu)準(zhǔn)備就緒,但是這里的準(zhǔn)備就緒需要特別說明一下:

DOM結(jié)構(gòu)已經(jīng)出來了,但是如果在DOM結(jié)構(gòu)中的某個DOM節(jié)點(diǎn)使用了v-if、v-show或者v-for(即根據(jù)獲得的后臺數(shù)據(jù)來動態(tài)操作DOM,即響應(yīng)式),那么這些DOM是不會再mounted階段找到的。

此時的mounted階段,一般是用于發(fā)起后端請求,拿回?cái)?shù)據(jù),配合路由鉤子做一些事情,簡單來說就是在mounted鉤子中加載數(shù)據(jù)而已,加載回來的數(shù)據(jù)是不會再這個階段更新的DOM中的

所以如果在mounted鉤子中使用$refs,如果ref是定位在有v-if、v-for、v-show中的DOM節(jié)點(diǎn),返回來的只能是undefined,因?yàn)樵趍ounted階段他們根本不存在??!

經(jīng)過檢驗(yàn),上面端文字是錯誤的,$refs定位不到的主要原因是因?yàn)関-if、v-for、v-show這些語句如果依賴父組件傳來的參數(shù)的話,該該參數(shù)是在mounted()階段子還沒獲取得到~~~~!?。?!

如果想要真正地在DOM加載完成后拿到數(shù)據(jù),就需要調(diào)用VUE的全局api : this.$nextTick(() => {})

如果說mounted階段是加載階段,那么updated階段則是完成了數(shù)據(jù)更新到DOM的階段(對加載回來的數(shù)據(jù)進(jìn)行處理),此時,ref、數(shù)據(jù)等等全部都掛載到DOM結(jié)構(gòu)上去,在update階段使用this.$refs.xxx,就100%能找到該DOM節(jié)點(diǎn)。

updated與mounted不同的是,在每一次的DOM結(jié)構(gòu)更新,vue都會調(diào)用一次updated(){}鉤子函數(shù)!而mounted僅僅只執(zhí)行一次而已

簡單來說,只要在調(diào)試的時候,能看到元素的存在,在updated階段都可以使用this.$refs.xxx找到對應(yīng)的DOM節(jié)點(diǎn)!

關(guān)于$refs的使用,官方文檔特別給出了以下提示:

 

使用的時候就注意咯- -

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue中使用refs定位dom出現(xiàn)undefined的解決方法

vue中使用refs定位dom出現(xiàn)undefined的解決方法:之前在公司做項(xiàng)目,一直感覺用ref來定位dom節(jié)點(diǎn)挺方便的。但是期間遇到了一個問題,就是在mounted(){}鉤子里面使用this.$refs.xxx,打印出來的卻是undefined? 于是我就對比了一下之前使用ref定位的.vue文件,發(fā)現(xiàn)了他們之間的區(qū)別。 我們要想知道為什么會定
推薦度:
標(biāo)簽: 使用 VUE 里面使用
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top