口水記錄一個問題。 ┓(;´_`)┏
寫程式碼的時候,遇到一個問題,就是在created
裡面呼叫介面獲取資料,利用v-for
渲染DOM
後,再在mounted
裡面呼叫渲染後的DOM
時,一直無法獲取到,顯示為undefined
。
按照VUE
的生命週期來說
created
元件例項建立完成,屬性已繫結,但DOM
還未生成,$el
屬性還不存在。mounted
模板編譯/掛載之後。
按道理,在mounted
裡面是可以獲取到created
階段渲染的DOM
的。後來通過console.log()
來進行判斷,發現在mounted
裡面的程式碼開始執行時,created
階段的DOM
渲染還未完成。
把mounted
改為updated
,DOM
是可以獲取到的,但是由於我的程式碼中涉及到倒數計時等頻繁更新DOM
的狀態,所以放棄了updated
的這個方法。
updated
元件更新之後
後來通過查閱文件發現,有一個方法可以解決這種問題,呼叫$nextTick
這個vue
的全域性方法。即在mounted
裡面呼叫此方法,用於DOM
載入更新完後進行的一次回撥函式性質的操作。
mounted(){
this.$nextTick(_=>{
//你的程式碼部分
})
}
複製程式碼
但是很可悲 = = ,我的created
裡渲染的DOM
還是比它要晚執行完,所以獲取DOM
依然是undefined
。
最後用了一個簡單粗暴的方法解決了此問題。
mounted() {
setTimeout(_ => {
//你的程式碼部分
}, 1000);
}
複製程式碼
(o°ω°o)