vue学习笔记4、父子组件之间的数据通信

1、父组件向子组件进行数据传递

<body>
    <div id="app">
        <p>{{a}}</p>
        <br/>
        <br/>
        <son :parentval="a"></son>
    </div>

    <!-- 这个是一个子组件模板,定义了一个id,方便下面引用 -->
    <template id="son">
        <div>
            <p>子主键的值:{{son_data}}</p>
            <p>父主键传给子主键的值:{{parentval}}</p>
            <button @click="dianwo">子组件按钮</button>
        </div>
    </template>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    // 定义一个子组件对象
    var son={
        //引用标签
        template:"#son",  
        //这个是数据对象,是子组件单独保存数据的,可以进行读写操作
        data(){
            return {
                son_data:"我是子主键的值",
            }
        },
        // props适用于进行组件之间传值用的,这里定义了一个parentval值,当父主键使用子组件时
        //<son :parentval="a"></son>  例如这个,那么这个父组件a的值就可以传递给子主键,前面有冒号,所有这里的a是变量
        props:{
            parentval:""
        },
        methods:{
            dianwo(){
                console.log("我是子组件按钮!");
            },
        }
    }

    var vm = new Vue({
        el: "#app",
        //父组件引入子主键,才能使用
        components:{
            son,
        },
        data: { 
            a: "我是父主键的值",
        },

    })

</script>

2、子主键向父组件进行数据传递

<body>
    <div id="app">
        <p>{{a}}</p>
        <br/>
        <br/>
        <!-- 这里父组件定义了一个parent_event事件,这个事件触发后执行parent_method方法 -->
        <son :parentval="a" @parent_event="parent_method"></son>
    </div>

    <!-- 这个是一个子组件模板,定义了一个id,方便下面引用 -->
    <template id="son">
        <div>
            <p>子主键的值:{{son_data}}</p>
            <p>父主键传给子主键的值:{{parentval}}</p>
            <!-- 子组件弄了一个click事件,执行dianwo方法 -->
            <button @click="dianwo">子组件按钮</button>
        </div>
    </template>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    // 定义一个子组件对象
    var son={
        //引用标签
        template:"#son",  
        //这个是数据对象,是子组件单独保存数据的,可以进行读写操作
        data(){
            return {
                son_data:"我是子主键的值",
            }
        },
        // props适用于进行组件之间传值用的,这里定义了一个parentval值,当父主键使用子组件时
        //<son :parentval="a"></son>  例如这个,那么这个父组件a的值就可以传递给子主键,前面有冒号,所有这里的a是变量
        props:{
            parentval:""
        },
        methods:{
            dianwo(){
                console.log("我是子组件按钮!");
                //调用父组件的parent_event事件,并且传递参数,由于parent_event事件执行了parent_method方法,所以相当于这个子组件执行的是父组件的parent_method方法,并且传参
                this.$emit("parent_event",123);
            },
        }
    }

    var vm = new Vue({
        el: "#app",
        //父组件引入子主键,才能使用
        components:{
            son,
        },
        data: { 
            a: "我是父主键的值",
        },
        methods:{
            parent_method(val){
                console.log("触发父组件方法,值已经改变,"+val);
                if(!val){
                    this.a="触发父组件方法,值已经改变,子组件无传递参数";
                }else{
                    this.a="触发父组件方法,值已经改变,子组件传递参数是:"+val;
                }
            }
        }

    })

按钮点击之前:

按钮点击之后: 

猜你喜欢

转载自blog.csdn.net/qq_39648029/article/details/103125395