Vue2和Vue3在v-for遍歷時ref獲取dom節(jié)點的區(qū)別及說明
Vue 2
在 vue 2 中,如果給 v-for 綁定一個 ref ,通過這個 ref 可以獲取到全部 v-for 的節(jié)點。
HTML
<div id='app'> <div> <p v-for="item in renderData" :key="item.name" ref="nodes">{{item.name}}</p> </div> </div>
JS
data() { return { renderData: [ { name: 'a' }, { name: 'b' }, { name: 'c' }, { name: 'd' }, { name: 'f' } ] } }, mounted() { console.log(this.$refs.nodes) }
從而可以獲得所有 v-for 的節(jié)點數組:
所以你可以在自定義觸發(fā)事件中將索引傳入,就可以在 this.$refs.nodes[index]
中獲取觸發(fā)事件的那個 dom 。
Vue 3
在 vue 3 中,對 v-for 的一體化(數組化)處理已經取消,變?yōu)楹瘮堤幚?ref 。
如果你像 vue 2 中綁定:
<div> <p v-for="item in renderData" :key="item.name" ref="nodes">{{item.name}}</p> </div>
此時通過 this.$refs.nodes
只能獲取遍歷的最后一個節(jié)點 dom 。
如果要實現 vue 2 相同的數組,你可以對 ref 進行自定義處理:
HTML
<div> <p v-for="item in renderData" :key="item.name" ref="handleNodes">{{item.name}}</p> </div>
JS
data() { return { nodes: [] } }, methods: { handleNodes(el) { this.nodes.push(el) } }
也就是說 ref 的處理方式變?yōu)榱撕瘮担@個函數默認傳入該節(jié)點。
當然,如果你不在 v-for 上使用,只是單純的加入單個 ref ,使用方法和 vue 2 沒有任何區(qū)別。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue quill editor 使用富文本添加上傳音頻功能
vue-quill-editor 是vue項目中常用的富文本插件,其功能能滿足大部分的項目需求。這篇文章主要介紹了vue-quill-editor 富文本添加上傳音頻功能,需要的朋友可以參考下2020-01-01在vue+element ui框架里實現lodash的debounce防抖
今天小編就為大家分享一篇在vue+element ui框架里實現lodash的debounce防抖,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11