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

Vue中复选框列表项删除后v-model绑定值未更新如何解决?

问题原因

Vue的复选框v-model绑定数组时,仅会响应用户对复选框的点击操作更新绑定值,源数组players发生变更时,框架不会自动校验selectedPlayers中存储的ID是否仍存在于players中,已删除元素对应的复选框销毁时也不会主动触发绑定数组的清理,因此会残留无效ID。

解决方案

方案1:监听源数组变化自动清理(通用场景推荐)

通过监听players数组的变更,每次更新后过滤掉selectedPlayers中不存在的ID,实现自动同步。
Vue2示例代码:

watch: {
  players: {
    // 若仅替换整个数组可删除deep配置提升性能
    deep: true,
    handler(newPlayers) {
      const validIdList = newPlayers.map(item => item.id)
      this.selectedPlayers = this.selectedPlayers.filter(id => validIdList.includes(id))
    }
  }
}

Vue3示例代码:

import { watch } from 'vue'

watch(players, (newPlayers) => {
  const validIdList = newPlayers.map(item => item.id)
  selectedPlayers.value = selectedPlayers.value.filter(id => validIdList.includes(id))
}, { deep: true })

方案2:操作源数组时同步更新选中值(性能更优)

如果对players的修改逻辑(如删除、新增)是固定的,可以直接在操作逻辑中同步处理selectedPlayers,无需额外监听。
以删除玩家逻辑为例:

// Vue3示例,Vue2修改对应变量即可
function removePlayer(playerId) {
  // 移除源数组对应项
  players.value = players.value.filter(p => p.id !== playerId)
  // 同步移除选中数组中的无效ID
  selectedPlayers.value = selectedPlayers.value.filter(id => id !== playerId)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:48:02