基础知识系列(十):Vue2和Vue3的组件通信

一、Vue2

1.父传子

在App.Vue中,写

<template>
    <div id="app">
        <MyHeader class="mh" :msg="msg"/>
    </div>
</template>

<script>
    import MyHeader from "./components/MyHeader.vue";
    export default{
        data(){
            return{
                msg:'hello vue'
            }
        },
        components:{
            MyHeader,
        }
    }
</script>

在MyHeader.Vue中,写

<template>
    <div>
        {{msg}}
    </div>
</template>

<script>
    export default {
        props:['msg'],
    }
</script>

2.子改父

(一)方法一(动态属性):

在App.Vue中,写

<template>
    <div id="app">
        <MyHeader class="mh" :msg="msg" :changeMsg="changeMsg"/>
    </div>
</template>

<script>
    import MyHeader from "./components/MyHeader.vue";
    export default{
        data(){
            return{
                msg:'hello vue'
            }
        },
        methods:{
            changeMsg(){
                this.msg = 'hello gis'
            }
        },
        components:{
            MyHeader,
        }
    }
</script>

在MyHeader.Vue中,写

<template>
    <div>
        {{msg}}
        <button @click="change">按钮</button>
    </div>
</template>

<script>
    export default {
        props:['msg','changeMsg'],
        methods:{
            change(){
                this.changeMsg()
            }
        }
    }
</script>

(二)方法二(动态事件):

在App.Vue中,写

<template>
    <div id="app">
        <MyHeader class="mh" :msg="msg" @changeMsg="changeMsg"/>
    </div>
</template>

<script>
    import MyHeader from "./components/MyHeader.vue";
    export default{
        data(){
            return{
                msg:'hello vue'
            }
        },
        methods:{
            changeMsg(){
                this.msg = 'hello gis'
            }
        },
        components:{
            MyHeader,
        }
    }
</script>

在MyHeader.Vue中,写

<template>
    <div>
        {{msg}}
        <button @click="change">按钮</button>
    </div>
</template>

<script>
    export default {
        props:['msg'],
        methods:{
            change(){
                this.$emit('changeMsg')
            }
        }

    }
</script>

二、Vue3(与Vue2的区别部分)

子改父:

在App.Vue中,写

<template>
    <div>
        <Child :msg="msg" @changeMsg="changeMsg"/>
    </div>
</template>

<script>
import { ref } from 'vue';
import Child from './Child.vue'
    export default {
        setup(){
            let msg = ref('hello vue3')
            function changeMsg(){
                msg.value = 'easy vue3'
            }
            return{
                msg,
                changeMsg
            }
        },
        components:{
            Child,
        }
    }
</script>

在Child.vue中,写

<template>
    <div>
        {{ msg }}
        <button @click="change">点击</button>
    </div>
</template>

<script>
    export default {
        props:['msg'],
        emits:['changeMsg'],   /* 更直观地获取绑定的自定义事件 */
        setup(props,ctx){ 
            console.log(props.msg);  
            function change(){
                ctx.emit('changeMsg')
            }
            return {
                change
            }
        }
    }
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值