1. 程式人生 > >this.$refs獲取不到dom的可能原因及方法解決

this.$refs獲取不到dom的可能原因及方法解決

背景

搞餓了麼高仿APP時,使用this.$refs.wrapper.getElementsByClassName('food-list')
時獲取不到dom節點在這裡插入圖片描述
正常能獲取到應該是如下圖:
在這裡插入圖片描述
然後我又用了網上的方法:

this.$refs.foodList
(foodList是li的dom節點)

結果還是重新整理頁面時獲取不到dom
然後我對比了網友訪的餓了麼的原始碼,下面是網友的
在這裡插入圖片描述
下面是我的:
在這裡插入圖片描述
而我又想了我每次都是修改vue檔案程式碼儲存的時候才能正常獲取dom節點,加上網友的程式碼每次呼叫鉤子函式時其實都會給data裡面的屬性賦值。然後我就想了:會不會是this.$refs

這個方法只有當vue檔案資料有改變時才能獲取到dom呢?說做就做:

問題解決

1.在data裡面寫上一個屬性:changValue=null,如下圖
在這裡插入圖片描述
2.在mounted鉤子函式裡寫一個超時呼叫

setTimeout(() => {
  this.changValue = 1;
  this.$nextTick(() => {
    this.calculateHeight();
  });
},0);
使得每次掛載完成時changValue這個屬性的值獲得改變

3.測驗結果
在這裡插入圖片描述噹噹噹! 如此一來,無論你怎麼樣重新整理頁面,都可以正常獲取到dom節點啦

結論

平時我們都沒遇到this.$refs

獲取不到dom節點,最大的可能是我們在當前元件用上了ajax/axios等方法,並且使得獲取到的資料在掛載完成(mounted)時賦值給了data裡面的屬性,如此一來就是每次重新整理頁面data裡面的屬性值都有改變,所以this.$refs就可以獲取到dom啦。