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

Vue3中v-model与v-for结合单选按钮的迭代变量更新问题求助

解决Vue3中v-model与v-for结合的单选按钮值绑定问题

错误原因

报错信息 'v-model' directives cannot update the iteration variable 'etat_commande' itself 的核心问题是:你将v-model直接绑定到了v-for循环的迭代变量etat_commande上。Vue禁止修改v-for的迭代变量——这个变量只是数组元素的临时引用,修改它既不会同步到原数组,还会引发数据逻辑混乱。

同时你的代码存在变量重名问题:computed属性名etat_commande和v-for迭代变量名完全一致,进一步加剧了逻辑混淆。

修正方案

1. 调整模板代码

修改v-for迭代变量名,并将input的v-model绑定到正确的computed属性:

<div
  v-for="etat in etat_commandes"
  :key="etat.code"
>
  <input type="radio"
    :value="etat.code"
    v-model="selectedEtatCommande"
    :disabled="!canWrite('etat_commande')"
    @change="onChange('etat_commande')"
    name="radio"
  >
  {{ etat.label }}
</div>

2. 修正Script逻辑

重命名computed属性避免变量冲突,确保双向绑定逻辑正确:

export default {
  data() {
    return {
      etat_commandes: [],
    }
  },
  computed: {
    selectedEtatCommande: {
      set(code) {
        console.log("selected code", code);
        if (code !== "") {
          this.articleStore.article.etat_commande = { code };
        } else {
          this.articleStore.article.etat_commande = null;
        }
      },
      get() {
        const code = this.articleStore.article?.etat_commande?.code;
        return code != null && code != undefined ? String(code) : "";
      }
    }
  }
}

修正要点说明

  • 将v-for迭代变量改为etat,与computed属性selectedEtatCommande彻底区分,消除命名冲突
  • input的v-model绑定到computed属性而非迭代变量,符合Vue响应式规则,能正确同步选中值
  • computed属性的get方法负责从store中读取已选中的code,实现后端数据的回显;set方法负责更新store中的数据,完成单选状态的同步

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:43:15