vue3 祖孙组件传值

这篇博客详细介绍了在Vue.js中如何使用provide和inject实现祖孙组件之间的值传递。祖组件通过provide暴露出`info`对象和`toSun`方法,子组件不进行任何操作,而孙组件则通过inject接收到这些属性和方法,并在按钮点击事件中修改`info`的age属性并调用`toSun`方法通知父组件更新。
摘要由CSDN通过智能技术生成

使用provide和inject 的方式让祖孙组件之间传值
祖组件:

<script setup lang='ts'>
import { provide, reactive } from "vue";
import Son from "./Son.vue";

const info = reactive({
    name:'ccc',
    age:10
})

provide("info",info)

const toSun=(value:number)=>{
    console.log('获取孙组件的值',value)
}

provide('toSun',toSun)

</script>
           
<template>
    <div class="box">
        <p>父组件--{{info.age}}</p>
        <Son />
    </div>
</template>
           
<style scoped lang='scss'>
</style>

子组件

<script setup lang='ts'>
import Grandson from './Grandson.vue';

</script>
           
<template>
    <div>
        <p>子组件</p>
        <Grandson />
    </div>
</template>
           
<style scoped lang='scss'>

</style>

孙组件

<script setup lang='ts'>
import { inject } from "vue";

type obj = {
    name:string,
    age:number
}

let info = inject("info") as obj

let toSun = inject("toSun") as Function

const change=()=>{
    info.age ++ 
    toSun(info.age)
}


</script>
           
<template>
    <div>
        <p>孙组件--{{info.name}}--{{info.age}}</p>
        <button @click="change">btn</button>
    </div>
</template>
           
<style scoped lang='scss'>

</style>

记录一下

Vue 3中,可以使用Props和Events来实现祖孙组件之间的传值。 1. Props:父组件可以通过props将数据传递给子组件。在子组件中,可以通过props选项接收这些数据。具体步骤如下: 父组件: ```vue <template> <div> <ChildComponent :message="message" /> </div> </template> <script> import ChildComponent from './ChildComponent' export default { components: { ChildComponent }, data() { return { message: 'Hello from parent component' } } } </script> ``` 子组件: ```vue <template> <div> <p>{{ message }}</p> </div> </template> <script> export default { props: ['message'] } </script> ``` 在父组件中,使用冒号(:)绑定属性,并将数据传递给子组件。子组件中通过props选项接收这个属性。 2. Events:子组件可以通过事件将数据传递给父组件。在子组件中,可以使用$emit方法触发一个自定义事件,并传递数据给父组件。具体步骤如下: 父组件: ```vue <template> <div> <ChildComponent @update-message="updateMessage" /> <p>{{ message }}</p> </div> </template> <script> import ChildComponent from './ChildComponent' export default { components: { ChildComponent }, data() { return { message: '' } }, methods: { updateMessage(newMessage) { this.message = newMessage } } } </script> ``` 子组件: ```vue <template> <div> <button @click="sendMessage">Send Message</button> </div> </template> <script> export default { methods: { sendMessage() { this.$emit('update-message', 'Hello from child component') } } } </script> ``` 在子组件中,使用@click绑定一个点击事件,并在事件处理程序中使用this.$emit方法触发自定义事件。父组件中通过@update-message监听这个事件,并在对应的事件处理函数中更新父组件的数据。 这样就实现了祖孙组件之间的传值。父组件通过props将数据传递给子组件,子组件通过事件将数据传递给父组件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值