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

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

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"><!--定义一个非父子的组件-->
    <my-ge></my-ge>
    <my-di></my-di>
  </div>
<script src="../js/vue-非父子组件通信.js"></script>
</body>
</html>

js部分:

//方法1,在js中定义一个空的vue实例,在要向外传数据的my-di组件中定义一个$emit()自定义事件将数据传输出去,然后在哥哥组件中接收数据,并改变哥哥组件当中的元素
var bus=new Vue();

var app=new Vue({
    el:'#app',
    components:{
        "my-ge":{
            template:'<div>{{g1}}:{{g2}}</div>',
            data:function(){
                return {
                    g1:"哥哥组件",
                    g2:"被弟弟组件改变"
                }
            },
            mounted:function(){//订阅,通过生命周期接受数据
                bus.$on('chuanShu',function(str){//在空vue实例中使用$on接收chuanShu事件
                    console.log(str);
                    //this这里指向的是bus的指向,在这里需要修改一下
                    this.g2=str;
                }.bind(this));//可以通过.bind(this)改变this指向,指向my-ge的this
            }
        },
        "my-di":{
            template:'<ul><li>{{d1}}</li><li @click="gettext" v-for="item in d2">{{item}}</li></ul>',
            data:function(){
                return {
                    d1:"弟弟组件",
                    d2:["第一","第二","第三"]
                }
            },
            methods:{//声明一个函数,在my-di中通过点击调用此函数
                gettext:function(e){//函数名gettext
                    //console.log(e.target.innerHTML);
                    //发布
                    bus.$emit("chuanShu",e.target.innerHTML);//函数中自定义一个事件,事件名chuanShu,第二个参数就是要传输的数据
                }
            }
        }
     }
})

猜你喜欢

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