1. 程式人生 > 其它 >使用事件代理解決v-html點選事件無效

使用事件代理解決v-html點選事件無效

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);  //呼叫點選事件方法
  }
},