我有一个列表,希望为列表中的每个项目处理一个单击事件

<ul>
  <li 
    v-for="item, index in items" 
    :key="index"
    @click="select(item)"
  >
    {{ item }}
  </li>
</ul>

playbook 是

...
methods: {
  select(item) {
    console.log('Select', item)
  }
}

当有大约10个项目时,这种方法效果很好.但是,当有大约1000个项目时,性能会变得非常慢,因为我为1000个项目附加了1000个事件.

解决方案是只为列表附加一个单击事件,并使用event.target

<ul @click="select($event)">
  <li 
    v-for="item, index in items" 
    :key="index"
  >
    {{ item }}
  </li>
</ul>

在函数select中,如何获得每个项目对应的item

推荐答案

你可以用

<ul @click="select($event)">
  <li 
    v-for="item, index in items" 
    :key="index"
    :id="index"
  >
    {{ item }}
  </li>
</ul>

然后在你的select:

select($event) {
  console.log('Select ', $event.srcElement.id)
}

Vue.js相关问答推荐

将事件监听器绑定到动态元素

vue 不重新渲染数据更改

如何通过 setup() 发出多个参数?

如果单元格不可见,则以编程方式打开行的编辑模式. Ag 网格,Vue.js

如何在vue中动态加载组件

使用 Vue.js 和 Jest 进行 URL 重定向测试

在textbox文本框 VueJS 2 中键入时搜索列表

如何将 Nuxt.js 更新到最新版本

重新加载发布到 Github 页面的 Vue 网站时出现 404

数据更新后触发 Vue.js 事件

Vue-test-utils:在单个测试中多次使用 $nextTick

Laravel 中的 VueJS 组件实现中的鼠标悬停

Vue.js 处理多次点击事件

使用 Vue-cli,我在哪里声明我的全局变量?

如何在 Vue.js 应用程序中正确下载 Excel 文件?

Vue Js如何在单个文件模板中使用mixins?

构建 Vue.js 应用程序时 JavaScript 堆内存不足

Vuetify RTL 风格

使用 Vue.js 获取所有选中复选框的列表

标签中的 href 赋值