vue中使用refs定位dom出現(xiàn)undefined的解決方法
之前在公司做項(xiàng)目,一直感覺用ref來(lái)定位dom節(jié)點(diǎn)挺方便的。但是期間遇到了一個(gè)問題,就是在mounted(){}鉤子里面使用this.$refs.xxx,打印出來(lái)的卻是undefined?
于是我就對(duì)比了一下之前使用ref定位的.vue文件,發(fā)現(xiàn)了他們之間的區(qū)別。
我們要想知道為什么會(huì)定位不到某個(gè)DOM節(jié)點(diǎn),我們首先要理解mounted(){}這個(gè)鉤子函數(shù)是用來(lái)做什么的。
下面是vue官方給出的vue生命周期(部分),正如官方所說(shuō)的一樣,一開始不必先理解,不過(guò)隨這你的學(xué)習(xí)與使用,他的參考價(jià)值會(huì)越來(lái)越高。
原來(lái),mounted階段,DOM結(jié)構(gòu)準(zhǔn)備就緒,但是這里的準(zhǔn)備就緒需要特別說(shuō)明一下:
DOM結(jié)構(gòu)已經(jīng)出來(lái)了,但是如果在DOM結(jié)構(gòu)中的某個(gè)DOM節(jié)點(diǎn)使用了v-if、v-show或者v-for(即根據(jù)獲得的后臺(tái)數(shù)據(jù)來(lái)動(dòng)態(tài)操作DOM,即響應(yīng)式),那么這些DOM是不會(huì)再mounted階段找到的。
此時(shí)的mounted階段,一般是用于發(fā)起后端請(qǐng)求,拿回?cái)?shù)據(jù),配合路由鉤子做一些事情,簡(jiǎn)單來(lái)說(shuō)就是在mounted鉤子中加載數(shù)據(jù)而已,加載回來(lái)的數(shù)據(jù)是不會(huì)再這個(gè)階段更新的DOM中的
所以如果在mounted鉤子中使用$refs,如果ref是定位在有v-if、v-for、v-show中的DOM節(jié)點(diǎn),返回來(lái)的只能是undefined,因?yàn)樵趍ounted階段他們根本不存在??!
經(jīng)過(guò)檢驗(yàn),上面端文字是錯(cuò)誤的,$refs定位不到的主要原因是因?yàn)関-if、v-for、v-show這些語(yǔ)句如果依賴父組件傳來(lái)的參數(shù)的話,該該參數(shù)是在mounted()階段子還沒獲取得到~~~~!?。。?/p>
如果想要真正地在DOM加載完成后拿到數(shù)據(jù),就需要調(diào)用VUE的全局api : this.$nextTick(() => {})
如果說(shuō)mounted階段是加載階段,那么updated階段則是完成了數(shù)據(jù)更新到DOM的階段(對(duì)加載回來(lái)的數(shù)據(jù)進(jìn)行處理),此時(shí),ref、數(shù)據(jù)等等全部都掛載到DOM結(jié)構(gòu)上去,在update階段使用this.$refs.xxx,就100%能找到該DOM節(jié)點(diǎn)。
updated與mounted不同的是,在每一次的DOM結(jié)構(gòu)更新,vue都會(huì)調(diào)用一次updated(){}鉤子函數(shù)!而mounted僅僅只執(zhí)行一次而已
簡(jiǎn)單來(lái)說(shuō),只要在調(diào)試的時(shí)候,能看到元素的存在,在updated階段都可以使用this.$refs.xxx找到對(duì)應(yīng)的DOM節(jié)點(diǎn)!
關(guān)于$refs的使用,官方文檔特別給出了以下提示:
使用的時(shí)候就注意咯- -
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Vue.js獲取被選擇的option的value和text值方法
今天小編就為大家分享一篇Vue.js獲取被選擇的option的value和text值方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08vue3 開始時(shí)間與結(jié)束時(shí)間比較驗(yàn)證(結(jié)束時(shí)間需要大于開始時(shí)間)
本文通過(guò)示例代碼介紹了vue3 開始時(shí)間與結(jié)束時(shí)間比較驗(yàn)證(結(jié)束時(shí)間需要大于開始時(shí)間)的相關(guān)操作,代碼簡(jiǎn)單易懂,感興趣的朋友跟隨小編一起看看吧2024-07-07Vue2.0 實(shí)現(xiàn)歌手列表滾動(dòng)及右側(cè)快速入口功能
這篇文章主要介紹了Vue2.0實(shí)現(xiàn)歌手列表滾動(dòng)及右側(cè)快速入口功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-08-08Vue 2閱讀理解之initRender與callHook組件詳解
這篇文章主要為大家介紹了Vue 2閱讀理解之initRender與callHook組件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08vue中v-for循環(huán)給標(biāo)簽屬性賦值的方法
這篇文章主要介紹了vue中v-for循環(huán)給標(biāo)簽屬性賦值的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10在Vue中使用Avue、配置過(guò)程及實(shí)際應(yīng)用小結(jié)
在項(xiàng)目中遇到通過(guò)點(diǎn)擊加號(hào)實(shí)現(xiàn)輸入框的增加、以及對(duì)該輸入框的輸入內(nèi)容進(jìn)行驗(yàn)證,通過(guò)這些誘導(dǎo)因素創(chuàng)作的這篇文章,本文重點(diǎn)給大家介紹在Vue中使用Avue、配置過(guò)程以及實(shí)際應(yīng)用,需要的朋友可以參考下2022-10-10element多個(gè)表單校驗(yàn)的實(shí)現(xiàn)
在項(xiàng)目中,經(jīng)常會(huì)遇到表單檢驗(yàn),在這里我分享在實(shí)際項(xiàng)目中遇到多個(gè)表單同時(shí)進(jìn)行校驗(yàn)以及我的解決方法,感興趣的可以了解一下2021-05-05