vue3 v-model emits 报错

1.父组件:

html:
<board-dialog v-model:visible="isVisible"></board-dialog>

2.子组件:

html:
<dialog v-model:visible="visible" @close="onCancel" ></dialog>

js:
const props = defineProps({
  visible: {
    type: Boolean,
    default: false,
    required: true,
  },
}
const emit = defineEmits(['update:visible']);
const onCancel = () => {
    emit('update:visible', false);
}

<dialog> 是某弹窗组件

调用 onCancel时

报错:
image.png

警告:
image.png
image.png

阅读 3k
1 个回答

已解决,解决办法:
1.将子组件中的 dialog v-model的变量 visible 换个名字,譬如 visible_local,v-model:visible="visible_local"

2.使用 watch 监听 visible 变化,把值传给 visible_local即可
watch(()=>props.visible, (vis)=>{visible_local.value = vis;})

应该是直接使用 visible,从父组件到子组件再到第三方组件,这种跨多个组件传值+绑定的方式存在潜在的问题

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题