使用事件代理解決v-html點選事件無效
阿新 • • 發佈:2021-08-20
v-html是vue中用來將string形式的html內容按普通HTML插入的命令 - 並且插入的內容不會作為 Vue 模板進行編譯。
專案中遇到的問題:
vue用v-html命令解析帶有html標籤的內容,a標籤內有點選事件(格式:<a @click='test()'>我是a標籤</a>),但是採用v-html解析標籤時會導致點選事件失效
就是前面提到的v-html的特性:將新增進去的@click事件按string形式插入,沒有作為 Vue 模板進行編譯。
解決方法:
vue程式碼如下:
<div @click="eventTemp"> <span v-html="content"></span> </div>
eventTemp(e){ //在判斷事件目標節點的時候,考慮到相容性應該統一轉換成大寫或小寫進行判斷 if (e.target.localName.toLowerCase() === 'a') { // 通過判端目標節點以後,就能在這裡對其進行操作啦。 let id = e.target.getAttribute('data-id') //獲取a標籤屬性,我這裡自定義了一個屬性data-id並將id賦值給了該屬性,如何需要獲取click方法的引數,需要獲取a標籤的click屬性,並手動解析獲取裡面的引數 this.customFormGet(id); //呼叫點選事件方法 } },