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

求助:Vuetify v-data-table中v-radio点击后全部选中问题

解决Vuetify v-data-table中v-radio单选全选的问题

嘿,我一眼就看出问题所在了——你现在给每一行都单独套了一个v-radio-group,而且所有组都绑定到同一个ex8变量上,这就导致所有单选框共享同一个选中状态,点任何一个都会触发全选。要实现真正的单行单选,我们需要调整单选组的结构,让整个表格的单选框属于同一个组。

下面是修改后的完整代码,我会标注关键改动:

修改后的HTML代码

<v-data-table 
  :headers="headersAllClientesCadastrados" 
  :items="AllClientesCadastrados" 
  :search="searchAllClientesCadastrados"
>
  <template v-slot:item="row">
    <tr>
      <td>
        <!-- 移除每行的独立radio group,改用全局组管理 -->
        <v-radio 
          color="primary" 
          :value="row.item.codigo" <!-- 用客户的唯一标识作为单选值,比如codigo -->
          v-model="selectedCliente" <!-- 绑定到全局的选中变量 -->
          @change="selecionaCliente(row.item)" <!-- 用change事件替代click,状态更新更准确 -->
        ></v-radio>
      </td>
      <td>{{ row.item.codigo }}</td>
      <td>{{ row.item.empresa }}</td>
      <td>{{ row.item.responsavel }}</td>
      <td>{{ row.item.email }}</td>
    </tr>
  </template>
</v-data-table>

<!-- 全局单选组,隐藏它只用来管理状态 -->
<v-radio-group v-model="selectedCliente" hidden></v-radio-group>

修改后的Script代码

export default {
  name: "NewDI",
  data: function () {
    return {
      selectedCliente: null, // 存储选中客户的唯一标识(比如codigo)
      headersAllClientesCadastrados: [
        { text: '', value: '' },
        // 修正headers的value属性,确保和item字段匹配
        { text: "Código", value: "codigo" },
        { text: "Empresa", value: "empresa" },
        { text: "Responsável", value: "responsavel" },
        { text: "Email", value: "email" },
      ],
      searchAllClientesCadastrados: '',
      AllClientesCadastrados: [],
    }
  },
  methods: {
    selecionaCliente(row){
      console.log('selected', row);
    },
  }
}

关键改动说明

  • 统一单选组范围:把原来每行的v-radio-group移到表格外,作为全局组,所有行的v-radio都属于这个组,自然只能选中一个。
  • 绑定全局选中变量:用selectedCliente代替原来的ex8,专门存储选中客户的唯一标识,方便后续获取选中数据。
  • 修正表头匹配:原来的headers里的value和你的item字段不对应(比如写了numCotation但实际是codigo),我已经修正了,这样表格数据能正确渲染。
  • 事件优化:把@click换成@change,因为click可能在单选框状态未更新时触发,change会在状态确认改变后执行,逻辑更可靠。

现在你再测试一下,点击任意行的单选框,只会选中当前行,其他行的单选框会自动取消选中,同时selecionaCliente也能正确拿到选中的客户对象啦。

内容的提问来源于stack exchange,提问作者Matheus Barem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:16:42