You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

v-data-table中点击单个复选框却触发所有行事件的解决方法

解决v-data-table自定义复选框触发所有行事件的问题

你遇到的问题根源在于错误使用了属性绑定:update:modelValue,而非事件监听@update:modelValue。:update:modelValue会将函数执行的结果绑定到属性上,每次组件重新渲染(比如任意行的复选框状态变化导致数据更新),所有可见行的selectIndividual函数都会被执行一次;而@update:modelValue是监听复选框的模型值更新事件,只有当前被点击的复选框才会触发对应的事件处理函数。


修正后的代码实现

模板部分

将属性绑定改为事件监听,通过箭头函数捕获当前行的index和item参数:

<v-data-table :items="eventData" item-key="myID" ...>
  ...
  <template v-slot:item="{ item, index }">
    ...
    <v-checkbox 
      v-model="item.isSelected" 
      @update:modelValue="() => selectIndividual(index, item)"
    ></v-checkbox>
    ...
  </template>
</v-data-table>

(可选)获取最新选中状态

如果需要获取复选框的最新选中值,可在箭头函数中传递事件参数:

<v-checkbox 
  v-model="item.isSelected" 
  @update:modelValue="(newState) => selectIndividual(index, item, newState)"
></v-checkbox>

对应的组件代码可调整为:

selectIndividual(index, item, newState) {
  console.log(index, item, newState);
},

原理说明

  • @update:modelValue是Vuetify复选框的官方事件,仅在当前复选框被交互(点击切换状态)时触发。
  • 箭头函数的作用是在模板渲染时捕获当前行的index和item上下文,确保事件触发时能准确传递当前行的信息,避免参数混淆。

内容的提问来源于stack exchange,提问作者Corey Ogburn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:50