vue中使用refs定位dom出現undefined?

vue中使用refs定位dom出現undefined?

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

  於是我就對比了一下之前使用ref定位的.vue文件,發現了他們之間的區別。

  我們要想知道爲什麼會定位不到某個DOM節點,我們首先要理解mounted(){}這個鉤子函數是用來做什麼的。

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

 

  原來,mounted階段,DOM結構準備就緒,但是這裏的準備就緒需要特別說明一下:

  DOM結構已經出來了,但是如果在DOM結構中的某個DOM節點使用了v-if、v-show或者v-for(即根據獲得的後臺數據來動態操作DOM,即響應式),那麼這些DOM是不會再mounted階段找到的。

  此時的mounted階段,一般是用於發起後端請求,拿回數據,配合路由鉤子做一些事情,簡單來說就是在mounted鉤子中加載數據而已,加載回來的數據是不會再這個階段更新的DOM中的

  所以如果在mounted鉤子中使用$refs,如果ref是定位在有v-if、v-for、v-show中的DOM節點,返回來的只能是undefined,因爲在mounted階段他們根本不存在!!

 

 

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

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

 

 

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

  updated與mounted不同的是,在每一次的DOM結構更新,vue都會調用一次updated(){}鉤子函數!,而mounted僅僅只執行一次而已

  簡單來說,只要在調試的時候,能看到元素的存在,在updated階段都可以使用this.$refs.xxx找到對應的DOM節點!

 

  關於$refs的使用,官方文檔特別給出了以下提示:

   使用的時候就注意咯- - 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章