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

BootstrapVue用.sync传prop后子组件绑定v-model报修改prop错误如何解决

问题原因

你出现报错的核心原因是违反了Vue的单向数据流规则:父组件传递给子组件的props仅允许子组件读取,不允许直接修改。
你直接将props中的visible绑定到了<b-collapse>的v-model上,而v-model本质是双向绑定语法糖,会在状态变化时直接修改绑定的变量,也就触发了「不可直接修改prop」的报错。

关于仅首次加载报错、后续可正常使用的现象,原因是<b-collapse>在首次挂载初始化时,会主动触发一次绑定值的同步操作,这时候直接修改了props所以抛出错误;后续你父组件使用了.sync修饰符,会监听子组件的update:visible事件更新父级的源数据,状态通过响应式流同步到子组件,看起来就可以正常使用,但本质错误写法并未修正,仍存在状态不一致的隐患。

另外你代码中的v-model="visibile"存在拼写错误,正确拼写为visible,这也可能是偶现异常的诱因。

修复方案

方案1:使用计算属性做中转(推荐)

在子组件内声明一个带get/set的计算属性,读取时返回props的值,修改时触发.sync对应的更新事件:

// Accordian 子组件JS部分
export default {
  props: {
    visible: {
      type: Boolean,
      default: false
    }
  },
  computed: {
    collapseStatus: {
      get() {
        return this.visible
      },
      set(newVal) {
        this.$emit('update:visible', newVal)
      }
    }
  }
}

模板中绑定该计算属性即可:

<b-collapse v-model="collapseStatus" />

方案2:拆分v-model手动处理事件

直接拆分<b-collapse>的v-model为属性绑定和事件监听,不需要额外声明计算属性:

<b-collapse :visible="visible" @input="$emit('update:visible', $event)" />

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 11:57:01