vuereact & vue & angular

Vue中 子组件与父组件之间的传值

2022-07-08  本文已影响0人  你怀中的猫

一、子组件向父组件传值

二、父组件向子组件传值

第一种写法有数据类型,type写什么数据类型,就能传递什么数据类型
如果你定义的数据类型不匹配,则会根据设置的数据类型强制转化


image.png

第二种写法 不规定数据类型时,按照下面的写法


image.png image.png

三、最后子传父、父传子的效果图

image.png

两组件的代码如下

子组件 Child.vue

<template>
    <div id="child">
        <h1>{{ msg }}</h1>
        <button @click="sendData">子向父传值</button>


        <!-- 父组件中的数据 -->
        <h2>{{ abc }}</h2>
        <h3>{{ aaa }}</h3>
    </div>
</template>

<script>
export default {
    name: 'Child',
    data() {
        return {
            msg: '这是子组件',
            cdata : '这是子组件中的数据',
        }
    },
    props : {

        abc : {

            // 定义父组件传递过来的数据类型
            type : String,
            requored : true,

            // 如果你定义的数据类型不匹配,则会根据设置的数据类型强制转化
        }
    },

    // 不规定数据类型时,按照下面的写法
    props: ["abc", 'aaa'],

    
    methods: {
        sendData() {
            console.log(this);
            // 子向父传值 需要用到自定义事件 $emit
            // this.$emit('自定义的事件名')

            // 当自定义事件触发时,所绑定的函数,就能自动获得这个事件在创建的时候 所写的参数

            this.$emit('byval',this.cdata);

        }
    }
}
</script>

<style lang="less" scoped>
#child {
    padding: 10px;
    border: 3px solid #007aff;
    width: 90%;
    height: 400px;
    margin: auto;
}
</style>>

</style>

父组件 Father.vue

<template>
    <div id="father">
        <h1>{{ msg }}</h1>
        <!-- 子组件中的数据 -->
        <h2>{{ data1 }}</h2>

        <!-- 子组件 -->
        <Child :abc="fdata" :aaa="aaa"    @byval="getdata" />
    </div>
</template>

<script>
// 引入子组件
import Child from '@/components/Child.vue';
export default {
    name: 'Father',
    data() {
        return {
            msg: '这是父组件',
            fdata: '这是父组件里面的数据1',
            aaa: '这是父组件里面的数据2',
            data1: '',
        }
    },
    components: {
        Child,
    },
    methods: {
        // 定义一个获取子组件传值的方法
        getdata(datas) {
            // datas 就是子向父传过来的数据
            // 由于函数内的参数 不能直接用于渲染
            // 所以我们需要在父组件的data中 定义一个变量
            // 来接收一下 子组件传递过来的参数
            this.data1 = datas;
        }
    }
}
</script>

<style lang="less" scoped>
</style>>
</style>
上一篇下一篇

猜你喜欢

热点阅读