Vue2、Vue3 使用 v-model 父子组件数据同步

先来看看vue2的写法:

Vue2

  • vue2 中父子组件数据同步 父→子 子→父 实现?
    • v-model=“count” 或者 xxx.sync=“msg”
  • v-model 语法糖 完整写法?
    • :value=“count” 和 @input=“count=$event”
  • xxx.sync 语法糖 完整写法?
    • :xxx=“msg” 和 @update:xxx=“msg=$event”

Vue3

Vue 3.4 开始,推荐的实现方式是使用 defineModel() 宏:
组件v-model

<!-- Child.vue -->
<script setup>
const model = defineModel()

function update() {
  model.value++
}
</script>

<template>
  <div>parent bound v-model is: {{ model }}</div>
</template>

<!-- Parent.vue -->
<Child v-model="countModel" />
// 使 v-model 必填
const model = defineModel({ required: true })

// 提供一个默认值
const model = defineModel({ default: 0 })


在这里插入图片描述

以下是VUE 3.4 之前的写法

父组件里

<template>
	<!-- 简写方式 -->
	<son-component v-model:count="parentVal"></son-component>
	<!-- 等价 -->
	<son-component :count="parentVal" @update:count="parentVal=$event"></son-component>
</template>

<script setup lang="ts">
import { onMounted, ref } from "vue";

const parentVal = ref(10)
</script>


子组件里
 
<template>
    <p>父组件传递过来的值:{{ props.count }}</p>
    <button @click="countNum">+1</button>
  </div>
</template>

<script setup lang="ts">
const props = defineProps<{
  count: number
}>()

const emit = defineEmits<{ (e: 'update:count', num: number): void }>()
function countNum() {
  emit('update:count', props.count + 1)
}
</script>

== v-model:xxx=‘’ 的固定写法,子组件里 update:(props数据字段)。比如,在这里若是改为update:countVal或其他,是不生效的==

  • vue3 中 v-model 语法糖?
    • :count=“parentVal” 和 @update:count=“parentVal=$event”

vue3中只需要 v-model 指令可以支持数据在父子组件同步,不再支持 .sync写法

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值