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

Vue.js循环中复选框功能异常的解决方案咨询

问题解决:复选框单选单个物料并收集Quantity值

问题现象

使用v-for渲染物料列表时,点击复选框会同时选中一批物料,排查发现是因为多个物料的Quantity参数值相同,需要实现点击复选框仅选中单个物料,并将其Quantity值加入checkedMaterials数组。

解决方案

1. 给v-for添加唯一标识key

Vue列表渲染需要唯一key跟踪节点身份,避免DOM复用导致的异常行为,直接用物料的唯一id作为key即可。

2. 放弃v-model绑定对象,改用@change事件手动处理

绑定整个物料对象时,若不同物料属性值完全一致,易导致Vue判断逻辑出错。改为绑定物料id,通过change事件手动控制checkedMaterials数组的添加与移除。

修改后的完整代码

模板部分

<table>
  <thead>
    <tr>
      <th>#</th>
      <th>Material name</th>
      <th>Количество</th>
    </tr>
  </thead>
  <tbody>
    <tr v-for="material in materials" :key="material.id">
      <td>
        <input 
          type="checkbox" 
          :value="material.id" 
          @change="handleMaterialCheck($event, material)"
        >
        {{ material.id }}
      </td>
      <td>{{ material.name }}</td>
      <td>{{ material.Quantity }}</td>
    </tr>
  </tbody>
</table>

脚本部分

export default {
  name: "Show",
  data() {
    return {
      materials: [],
      checkedMaterials: [],
      part: {}
    }
  },
  mounted() {
    this.getPart()
    this.getMaterials()
  },
  methods: {
    getPart() {
      axios.get(`/api/part/${this.$route.params.id}`).then(res => {
        this.part = res.data.data
      })
    },
    getMaterials() {
      axios.get('/api/material').then(res => {
        this.materials = res.data.data;
      })
    },
    handleMaterialCheck(event, material) {
      const quantity = material.Quantity;
      if (event.target.checked) {
        if (!this.checkedMaterials.includes(quantity)) {
          this.checkedMaterials.push(quantity);
        }
      } else {
        const index = this.checkedMaterials.indexOf(quantity);
        if (index !== -1) {
          this.checkedMaterials.splice(index, 1);
        }
      }
    }
  },
}

额外修复说明

  • 修正了原代码中标签闭合错误(多余的</td>)
  • 将materials初始值从空字符串改为空数组,符合数据类型规范
  • 补充part变量初始化,避免未定义报错

内容的提问来源于stack exchange,提问作者Павел Жуков

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:39:22