Skip to content

vue 文件中,在 v-for 时给每项元素绑定事件需要用事件代理吗,为什么?

Posted on:2024年8月15日 at 14:02

在 Vue 文件中,v-for 遍历数组时,为每项元素绑定事件通常不需要事件代理,但使用事件代理有其优势。这里是两种方式的对比:

直接绑定事件

<div v-for="item in items" :key="item.id">
  <button @click="handleClick(item)">Click me</button>
</div>

优点

缺点

事件代理

事件代理是将事件绑定到一个父元素上,并利用事件冒泡机制处理子元素的事件。

<div @click="handleParentClick">
  <div v-for="item in items" :key="item.id">
    <button :data-id="item.id">Click me</button>
  </div>
</div>

在方法中:

methods: {
  handleParentClick(event) {
    const target = event.target;
    if (target.tagName === 'BUTTON') {
      const id = target.getAttribute('data-id');
      const item = this.items.find(item => item.id === id);
      this.handleClick(item);
    }
  }
}

优点

缺点

原文转自:https://fe.ecool.fun/topic/a7da8658-3b6f-4417-8ff0-66e078fa09b9