DAY22 | 跟 Vue.js 認識的30天 - Vue 常用 API 說明(`$refs`)
使用 Vue 之後,我們就很少去操作 DOM 了,但如果真的需要去操作 DOM 時怎麼辦?還是跟之前寫 JavaScript 一樣嗎?一定寫一長串的 document.querySelector('.className')
嗎?不! Vue 提供了一個可以快速取得 DOM 元素的屬性 — $refs
。接下來就來了解一下$refs
屬性。
利用 $refs
取得 DOM 元素
在使用 Vue 屬性 $refs
前取得 DOM 元素前,必須先透過 HTML Attribute ─ ref
來將該 DOM 元素的資料註冊到實例的 $refs
裡。
1 | <!-- 將 p 這個 DOM 元素以 text 名註冊到 $refs 裡--> |
關於 $refs
的出現時機及使用時機,可以參考DAY02 | 跟 Vue.js 認識的30天 - Vue 實體的生命週期(Lifecycle Hooks)及模板語法(Template Syntax) 或是下圖。
利用 $refs
取得子模組
1 | <child-component ref="greet"></child-component> |
透過 $refs
取得子模組 ↓↓↓
在子模組中透過 $refs
取得 DOM 元素 ↓↓↓
注意事項
透過練習發現 $refs
屬性的確在 created()
階段就存在,但如果要取得該屬性裡的 DOM 元素或是子模組都會失敗,這是因為 $refs
屬性在 Vue init 階段即會被初始化,所以可以透過 this.$refs
取得 ref
資料,但是如果要再進一步取得 DOM 元素或是子模組就會失敗了(DOM 元素或是子模組還不存在),這是因為真正的 DOM 元素或是子模組還沒被渲染出來,他們是在 mounted()
階段才真正存在。
Vue 文件也特別提醒:
$refs
不是響應式的,所以不要試圖使用資料綁定;要避免在模板或計算屬性中訪問$refs
。
Demo
See the Pen DAY22 | 跟 Vue.js 認識的30天 - Vue 常用 API 說明(`$refs`) by Celeste6666 (@celeste6666) on CodePen.
參考資料: