小程序是不能使用getElementById之類的dom api,所以考慮使用ref來獲取dom元素,但事實上并不是如此,綁定ref后并沒有輸出我想要的dom元素。
既然console.log(this.$refs.iRef)為undefined,會不會this.$refs也是undefined?然而this.$refs是有值的,就是沒有iRef,那么到底是為什么?
會不會是需要延遲獲取,dom還沒有生成?見此,我設(shè)置了2秒定時器并放在mounted中執(zhí)行,結(jié)果:然并卵,還是undefined。
我瀏覽了一下vue官網(wǎng)對ref的說明,明白了出問題的原因,這里引用vue官網(wǎng)的說法:
關(guān)于 ref 注冊時間的重要說明:因為 ref 本身是作為渲染結(jié)果被創(chuàng)建的,在初始渲染的時候你不能訪問它們 - 它們還不存在!
$refs
?也不是響應(yīng)式的,因此你不應(yīng)該試圖用它在模板中做數(shù)據(jù)綁定。
解釋:如果你該ref綁定的元素不是當(dāng)前頁面的元素,也就是當(dāng)前頁面調(diào)用的某個子組件,那么在mounted中是不能通過$refs來訪問的,可以通過this.$nextTick()來訪問它,而且得放在methods里面。
我嘗試著去用this.$nextTick()來獲取該元素,但是依舊是undefined。最后,我想起來我這個是uniapp項目,會不會和uniapp有關(guān)?
最終結(jié)論
小程序中,uniapp的ref要綁定在子組件中才能被獲取,如果綁定在view,是獲取不了的,你得把業(yè)務(wù)寫在一個組件來引用才行。文章來源:http://www.zghlxwxcb.cn/news/detail-505902.html
h5則沒有這種情況。文章來源地址http://www.zghlxwxcb.cn/news/detail-505902.html
到了這里,關(guān)于uniapp中開發(fā)小程序使用ref獲取dom實例,一直顯示undefined,竟然發(fā)現(xiàn)是這個原因!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!