vue中的$refs屬性幾個注意點


1.在vue中獲取dom推薦使用$refs來獲取,可是有時會出現 this.$refs.xxx 為undefined的情況。

  • 場景1:在created()里使用
    在這個生命周期中進行數據觀測 ,屬性和方法的運算,watch 事件回調。但是頁面還沒有掛載上去,沒有e l 屬 性 , t h i s . el 屬性,this.elthis.refs無法調用dom。
    解決辦法:換成在mounted()里使用

  • 場景2:父元素或當前元素使用了v-if或v-show
    因為$refs不是響應式的,只在組件渲染完成后才會生效,在初始渲染的時候是不存在的。
    因為是非響應式的,所有動態加載的模板更新它都無法相應的變化。
    解決辦法:可以通過setTimeout(()=>{…}, 0)來實現。

2.如果使用v-for 遍歷加ref時可以使用 ,即 :ref ="variable" ,這樣得到的是不同的ref。

<div v-for="(item,index) in arr" :key="index">
  <child  :ref="`refName${index}`"/>
</div>
//this.$refs[`refName${index}`]每一項都是一個僅包含一個元素的數組
this.$refs[`refName${index}`][0].fun();//調用第一個組件內的方法

 但是也可以不使用 ,這時得到的 ref 將會是一個包含了對應數據源的這些子組件的數組。

<div v-for="(item,index) in arr" :key="index">
  <child  ref="refName"/>
</div>
//this.$refs.refName是一個包含了對應數據源的這些子組件的數組
this.$refs.refName[0].fun();//調用第一個組件內的方法

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM