Vue3.0 自定义v-model:xxx

父组件

<ChildComponent v-model:title="pageTitle" />

子组件

export default {
  props: {
    title: String
  },
  emits: ['update:title'],
  methods: {
    changePageTitle(title) {
      this.$emit('update:title', titleChild)
    }
  }
}

可以看到父组件v-model后面的title在子组件的props、emits和$emit里面需要保持一致。
其实这些官网都有,下面重点讲一下setup中的。
父组件

<ChildComponent v-model:title="pageTitle" />

子组件

export default {
  props: {
    title: String
  },
  emits: ['update:title'],
  setup(){
  const titleChild = ref<string>('')
  emit('update:title',titleChild)
  return {
  		titleChild
  	}
  }
}

这种情况只触发了一次update:title,但是你会发现你titleChild在子组件改变,父组件也会发生改变。
父组件

<ChildComponent v-model:title="pageTitle" />

子组件

export default {
  props: {
    title: String
  },
  emits: ['update:title'],
  setup(){
  const titleChild = ref<string>('')
  updateTitle = ()=>{
		emit('update:title',titleChild.value)
	}
  return {
  		titleChild
  	}
  }
}

这里是触发一次updateTitle,会传递一次值给父组件。如果emit('update:title',titleChild.value)改为emit('update:title',titleChild),只要触发一次updateTitle,后面titleChild改变父组件就会同步改变。
造成这种情况的原因是因为ref(’’)的proxy对象。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
vant的v-model指令用于实现双向数据绑定,但在某些情况下可能会遇到问题。引用\[1\]中提到了一个问题,即使用v-model.number修饰符时,@input事件会触发多次。解决这个问题的方法是去掉.number修饰符,只使用v-model指令即可。 另外,引用\[2\]中提到了一个关于v-model的限制,即v-model不能用于prop,因为本地prop绑定是不可写的。解决这个问题的方法是使用v-bind绑定prop,并结合v-on监听器来触发update:x事件。 最后,引用\[3\]中提到了一个关于子组件中更改prop的警告。在Vue中,每次父组件更新后,所有子组件中的props都会被更新到最新值,因此不应该在子组件中更改prop的值。如果这样做了,Vue会在控制台上抛出警告。 综上所述,如果你在使用vant的v-model时遇到问题,可以参考上述解决方法来解决。 #### 引用[.reference_title] - *1* [vant v-model.number监听事件触发多次](https://blog.csdn.net/Smile_ping/article/details/125471068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue3 子组件上绑定(v-model=“xx“) 父组件传过来的值后报错](https://blog.csdn.net/weixin_42792519/article/details/128626270)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值