vue本身不做事件代理(react將所有事件都委托到document上,然后進行派發)
- 普通html元素和在組件上掛了
.native
修飾符的事件。最終EventTarget.addEventListener()
掛載事件 - 組件上的,vue組件實例上的自定義事件(不包括
.native
)會調用原型上的$on,$emit
(包括一些其他api$off,$once
等等)
vue自身沒有做事件代理,如果需要,則直接代理到父節點
<ul @click="meths"> <li v-for="(item,key) in 10" :key="key" :data-index="key">{{item}}</li> </ul> meths(e) { if (e.target.nodeName.toLowerCase() === 'li') { console.log(e.target.innerHTML) console.log(e.target.dataset) } }
事件代理作用主要是 2 個
- 將事件處理程序代理到父節點,減少內存占用率
- 動態生成子節點時能自動綁定事件處理程序到父節點