前端基础-vue(父子组件通信)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41442781/article/details/89880551

html部分:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>vue-父子间组件通信</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
<div id="app"><!--给id=app的添加一个Vue-->
    <my-zi :fu="list" :fu2="list2"></my-zi><!--需要在组件中声明一个属性名fu,属性值list,list是从父级组件中拿出的数据-->
</div>
<script src="../js/vue-组件通信.js"></script>
</body>
</html>

js部分:

var app=new Vue({//声明的vue本身就是一个组件
    el:"#app",
    data:{
        list:'父级数据',//这个就相当于父级组件的数据
        list2:'这里是父级组件,实例中,通过孙子元素改变父级元素',//这个就相当于父级组件的数据
    },
    components:{//定义一个局部组件
        "my-zi":{//局部组件名,让html用这个组件名调用
            props:["fu","fu2","fu3"],//通过props可以将父级的数据传递到子组件中使用,传输数据名就行,没有props就不能传给子组件
            data:function(){//把fu2这个数据重新付一下值,这样改变当前组件的数据时并不会影响到父级的fu2的数据,控制台也不好报错
                return {
                    fufu:this.fu2,
                    fufufu:this.fu3
                }
            },
            template:`<div>
                          <div>
                              局部组件的内容和父级通过props传过来的数据:{{fu}}
                          </div>
                          <div>
                              局部组件的内容和父级通过props传过来的数据:{{fufu}}2222改变fufu的数据,对数据的操作
                          </div>
                          <div ref="f3">
                              局部组件的内容和父级通过props传过来的数据:{{fufufu}}3333改变fufu的数据,对dom的操作
                          </div>
                          <mySun @suntext="changesfu" :sun='fu'> 
                          //这里通过@接收了自定义的事件suntext,同时也获得了数据,自定义的事件发生后执行向对应的方法
                          </mySun>
                      </div>`, 
                       //第二个div(mySun)是sun组件声明一个属性名sun,属性值fu,fu是从父级组件中拿出的数据,mySun必须跟div在一个根标签中
            
            methods:{//声明一个函数
                changesfu:function(str){//通过自定义的事件,调用这个函数
                    //console.log(str);
                    this.fufu=str;//改变fufu的数据,对数据的操作
                    this.$refs.f3.innerHTML=str;//改变fufu的数据,对dom的操作
                    
                }
            }    ,      
            components:{//在子组件中添加一个孙子组件
                'mySun':{//局部组件名,sun组件,让父级的html用这个组件名调用
                 props:["sun"],
                    template:`<div>
                                  <div>这里是孙子组件拿到的父级组件的数据:{{sun}}</div>
                                  <div @click="clickSun">让孙子组件向父级组件传递数据,先绑定一个点击事件,执行方法clickSun,这一行可以点击</div>
                              </div>`,
                    methods:{
                        clickSun:function(e){
                            console.log(e.target.innerHTML);//可以在控制台打印Sun组件的绑定点击事件的组件中的内容
                            this.$emit("suntext",e.target.innerHTML);//触发自定义事件的方法,第一个参数就是自定义参数的名字,第二个参数是要向自定义事件传递的数据/参数,触发了自定义的事件后,还要在父级中接收这个数据
                        }
                    }
                }
            }
        }
    }
})

猜你喜欢

转载自blog.csdn.net/qq_41442781/article/details/89880551