Vue父子组件之间传递数据

父组件向子组件传递数据使用子组件的props属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
<!--    key=value  获取静态数据-->
<!--    :key=value  获取父组件中的数据-->
<!--    @key=value  给子组件绑定父组件的事件-->
    <login title="我是静态标题" :name1="name" @test="test1"></login>
</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
    const login = Vue.component('login',{
        template:`<div><h2 @click="test">用户登录 ==> {{title}} ===> {{name1}}</h2></div>`,
        data(){
            return{
            }
        },
        props:['title','name1'],
        methods:{
            test(){
                alert("我是子组件的方法");
                this.$emit('test');
            }
        }
    });


    new Vue({
        el:"#app",
        data:{
            msg:"gzy",
            name:"动态获取父组件的title"
        },
        methods:{
            test1(){
                alert("我是父组件中的方法");
            }
        }
    });
</script>

子组件向父组件传递数据通过方法传递

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
<!--    //子组件调用父组件的方法,驼峰命名法不能调用,要将其改为小写-->
<!--    @key=value(方法名) 向子组件传递方法-->
    <login @testParent="testParent"></login>

</div>
</body>
</html>
<script src="js/vue.js"></script>
<script>
    //全局子组件
    const login = Vue.component('login',{
        template:`<div><h2><button @click="testChild">我是子组件</button></h2></div>`,
        data(){
            return {
                msg:"我是子组件中的信息"
            }
        },
        methods:{
            testChild(){
                alert("我是子组件的testChild方法");
                //子组件调用父组件的方法,驼峰命名法不能调用,要将其改为小写
                //这里emit里的字符串填写的时子组件@后的字符串
                //将子组件里的数据可以通过参数回传给父组件
                this.$emit('testparent',this.msg);
            }
        }
    })

    new Vue({
        el:"#app",
        data:{
            msg:"我是父组件的信息"
        },
        methods:{
            //子组件回传数据需要用被子组件传递的方法接受参数
            testParent(msg){
                alert("我是父组件中的方法testParent");
                alert(this.msg);
                this.msg = msg;
                alert(this.msg);
                alert("子组件向父组件传递参数成功");
            }
        }
    });
</script>

总结

1.使用组件时可以在组件上定义多个属性以及对应数据
2.在组件内部可以使用props数组生命多个定义在组件上的属性名 日后可以在组件中通过{{ 属性名 }} 方式获取组件中属性值
3.使用v-bind形式将数据绑定Vue实例中data属性,日后data属性发生变化,组件内部数据跟着变化
4.组件中定义事件和直接在Vue中定义事件基本一致 直接在组件内部对应的html代码上加入@事件名=函数名方式即可
5.在组件内部使用methods属性用来定义对应的事件函数即可,事件函数中this 指向的是当前组件的实例
6.在子组件中调用传递过来的相关事件必须使用 this.$emit('函数名') 方式调用
posted @ 2021-09-13 18:19  code-G  阅读(71)  评论(0编辑  收藏  举报