Vue通過ref獲取不到$refs問題
Vue通過ref獲取不到$refs
今天寫項(xiàng)目時(shí)發(fā)現(xiàn)一個(gè)問題,就是明明已經(jīng)定義了ref,但通過$refs打印卻沒有打印出想要的結(jié)果。
代碼如下
<!-- html部分 --> <div ref="myOrder" v-if="isOrder"></div> // js部分 init () { ?? ?console.log(this.$refs.myOrder) //undefined }
打印結(jié)果是undefined。
后來查閱資料后發(fā)現(xiàn)問題所在:ref所在的標(biāo)簽不要用v-if,使用v-show就好了。并且ref的父級標(biāo)簽也不要用v-if。能用v-show就用v-show。否則就會出現(xiàn)打印$refs時(shí),值為undefined
使用$refs獲取不到DOM元素
this.$refs.xx 為 undefined 的幾種情況:
1. 在created 鉤子函數(shù)中調(diào)用
create()在實(shí)例創(chuàng)建完成后被立即調(diào)用。這時(shí),實(shí)例已完成數(shù)據(jù)觀測、屬性和方法的元素,watch/event事件回調(diào)。但是,掛載階段還沒有開始,所以this.$refs獲取不到DOM。
2. 獲取的是設(shè)置了v-if/v-show的元素
如果在DOM結(jié)構(gòu)中的某個(gè)DOM節(jié)點(diǎn)使用了v-if、v-show或v-for(根據(jù)后臺數(shù)據(jù)動態(tài)操作DOM),那么這些DOM 在mounted階段是不存在的。
在mounted鉤子中加載回來的數(shù)據(jù)不會在這個(gè)階段更新到DOM中。所以在mounted鉤子中使用$refs獲取有v-if、v-for、v-show 的DOM節(jié)點(diǎn),返回來的會是undefined。
解決:
1.不在munted中獲取元素,在updated中獲取。
2.使用$nextTick:
- $nextTick是在下次DOM更新循環(huán)結(jié)束之后執(zhí)行延遲回調(diào),在修改數(shù)據(jù)之后使用$nextTick,則可以在回調(diào)中獲取更新后的DOM。
if(){// 隨便舉栗子 ?? ?this.a = true;// 修改數(shù)據(jù) ?? ?this.$nextTick(function () {// 調(diào)用$nextTick函數(shù) ?? ??? ?let dom1 = this.$refs.test;// o了 ?? ?}) }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Bootstrap + Vue.js實(shí)現(xiàn)表格的動態(tài)展示、新增和刪除功能
這篇文章主要介紹了使用Bootstrap + Vue.js實(shí)現(xiàn)表格的動態(tài)展示、新增和刪除功能,需要的朋友可以參考下2017-11-11Vue 實(shí)現(xiàn)點(diǎn)擊空白處隱藏某節(jié)點(diǎn)的三種方式(指令、普通、遮罩)
最近小編接到這樣的需求:彈出框(或Popover)在 show 后,點(diǎn)擊空白處可以將其 hide。針對這個(gè)需求,小編整理了三種實(shí)現(xiàn)方式,如果大家對vue 點(diǎn)擊空白隱藏節(jié)點(diǎn)問題感興趣的朋友跟隨小編一起看看吧2019-10-10vue使用微信JS-SDK實(shí)現(xiàn)分享功能
這篇文章主要介紹了vue使用微信JS-SDK實(shí)現(xiàn)分享功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Vue3.0導(dǎo)出數(shù)據(jù)為自定義樣式Excel的詳細(xì)實(shí)例
在許多的后臺系統(tǒng)中少不了導(dǎo)出Excel表格的功能,下面這篇文章主要給大家介紹了關(guān)于Vue3.0導(dǎo)出數(shù)據(jù)為自定義樣式Excel的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06vue計(jì)算屬性computed方法內(nèi)傳參方式
這篇文章主要介紹了vue計(jì)算屬性computed方法內(nèi)傳參方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-10-10詳解element-ui 組件el-autocomplete使用踩坑記錄
最近使用了el-autocomplete組件,本文主要介紹了element-ui 組件el-autocomplete使用踩坑記錄,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03