vue3父子组件通信,子组件修改父组件传过来的值

一、第一种,通过props方式传值:

父组件:

父组件调用子组件Child1时通过 :msg2= "msg2"把msg2的数据传给子组件,并且通过自定义事件接收子组件的emit通知,用来修改父组件的msg2数据。

源码:

<template>
  <div>
    我是home组件 父组件
    <h1>{{ msg }}</h1>
    <div>父组件--props方式传值:{{ msg2 }}</div>

    <Child1 :msg2="msg2" @event="eventFn" />
  </div>
</template>
<script setup>
import { ref } from 'vue'
import Child1 from './child1.vue'
const props = defineProps(['msg'])

const msg2 = ref('今天是星期三,多云。')

const eventFn = (val) => {
    msg2.value = val
}

</script>

子组件:

子组件通过defineProps接收一下msg2 ,可以直接展示在模板上,子组件自定义emit事件去通知父组件修改msg2的数据,数值是子组件传过去的。

源码:

<template>
  <div>
    <h3>大家好,我是子组件1</h3>
    <button @click="handleClick">修改父组件数据msg2</button>
    <div>子组件——props方式传过来:{{ msg2 }}</div>
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'
const props = defineProps(['msg2'])

const emit = defineEmits(['event'])

const handleClick = () => {
    emit('event', '希望早日出太阳,暴富而不是暴晒!')
}

</script>

点击前:

 

点击后:

 

 二、第二种,通过v-model+冒号+要传的值  的方式(这个v-model可以写多个):

父组件:

父组件调用子组件时,通过v-model:num="num" 的方式传值给子组件。

源码:

<template>
  <div>
    我是home组件 父组件
    <h1>{{ msg }}</h1>
    <div>父组件--props方式传值:{{ msg2 }}</div>
    <div>父组件num——v-model方式传值:{{ num }}</div>

    <Child1
     :msg2="msg2" @event="eventFn"
     v-model:num="num"
     />
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'
import Child1 from './child1.vue'
const props = defineProps(['msg'])

const msg2 = ref('今天是星期三,多云。')
const num = ref(0)

const eventFn = (val) => {
    msg2.value = val
}

</script>

子组件:

子组件也先通过defineProps接收一下num,并展示。然后通过自定义emit事件

const emit = defineEmit(['update: num'])

然后通过点击事件updateNum方法来触发通知父组件修改num数据。

源码:

<template>
  <div>
    <h3>大家好,我是子组件1</h3>
    <button @click="handleClick">修改父组件数据msg2</button>
    <div>子组件——props方式传过来:{{ msg2 }}</div>

    <button @click="updateNum">修改父组件num</button>
    <div>子组件num——v-model方式传过来:{{ num }}</div>
  </div>
</template>

<script setup>
import { ref, reactive } from 'vue'
const props = defineProps(['msg2','num'])

const emit = defineEmits(['event', 'update:num'])

const handleClick = () => {
    emit('event', '希望早日出太阳,暴富而不是暴晒!')
}
const updateNum = () => {
    emit('update:num', 222)
}

</script>

点击前:

 

点击后:

 

 三、父组件调用子组件时,通过v-model传多个值

父组件写法:

子组件写法:

效果:

 

以上就是vue3中,props和v-model两种常用的父子组件通信方法 。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值