Vue2.x 兄弟组件之间的数据传递

Posted chilllife

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue2.x 兄弟组件之间的数据传递相关的知识,希望对你有一定的参考价值。

兄弟组件之间的数据传递

思路:创建三个组件分别是<my-aaa><my-bbb><my-ccc>,在<my-ccc>中接收<my-aaa><my-bbb>发送的数据,当改变<my-aaa><my-bbb>所发送的数据时,<my-ccc>接收的数据也随之改变

html

<body>
    <div id="box">
        <my-aaa></my-aaa>
        <my-bbb></my-bbb>
        <my-ccc></my-ccc>
    </div>
    <template id="aaa">
        <div>
            <input type="button" @click="changed" value="我是aaa的按钮">
        </div>
    </template>
    <template id="bbb">
        <div>
            <input type="button" @click="changed" value="我是bbb的按钮">
        </div>
    </template>
    <template id="ccc">
        <div>
            <h1>a</h1>
            <h1>b</h1>
        </div>
    </template>
</body>

script

需要在外部单放一个实例化对象,用于跟所有人说话。

就是传话用的,本身没有什么意义。

var vm = new Vue();

 

分别创建三个组件,两个传递数据,一个接收数据。

new Vue(
        el:‘#box‘,
        components:
            "my-aaa":
                data()
                    return 
                        aMsg:"我是a的数据"
                    
                ,
                template:‘#aaa‘
            ,
            "my-bbb":
                data()
                    return 
                        bMsg:‘我是b的数据‘
                    
                ,
                template:‘#bbb‘
            ,
            "my-ccc":
                template:‘#ccc‘,
            
        
    )

 

传递数据 ,需要用 $emit(‘key‘,value)

key:用什么名字传递

value:传递的数据

methods:
    changed()
        vm.$emit(‘a-msg‘,this.aMsg);
    

 

接收数据,需要用 $on(‘key‘,(data)=)

key:接收数据的名字

data:可以随意定义,相当于一个回调函数

data()
    return 
        a:‘暂无a的数据‘,
        b:‘暂无b的数据‘
    
,
mounted()
    vm.$on(‘a-msg‘,(data)=>
        this.a = data;
    );
    vm.$on(‘b-msg‘,(data)=>
        this.b = data;
    )

完整代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>组件传递</title>
    <script src="bower_components/vue/dist/vue.js"></script>
</head>
<body>
    <div id="box">
        <my-aaa></my-aaa>
        <my-bbb></my-bbb>
        <my-ccc></my-ccc>
    </div>
    <template id="aaa">
        <div>
            <input type="button" @click="changed" value="我是aaa的按钮">
        </div>
    </template>
    <template id="bbb">
        <div>
            <input type="button" @click="changed" value="我是bbb的按钮">
        </div>
    </template>
    <template id="ccc">
        <div>
            <h1>a</h1>
            <h1>b</h1>
        </div>
    </template>
</body>
<script>
    var vm = new Vue();

    new Vue(
        el:#box,
        components:
            "my-aaa":
methods:
    changed()
        vm.$emit(a-msg,this.aMsg);
    
,
                data()
                    return 
                        aMsg:"我是a的数据"
                    
                ,
                template:#aaa
            ,
            "my-bbb":
                methods:
                    changed()
                        vm.$emit(b-msg,this.bMsg);
                    
                ,
                data()
                    return 
                        bMsg:我是b的数据
                    
                ,
                template:#bbb
            ,
            "my-ccc":
                template:#ccc,
                data()
                    return 
                        a:暂无a的数据,
                        b:暂无b的数据
                    
                ,
                mounted()
                    vm.$on(a-msg,(data)=>
                        this.a = data;
                    );
                    vm.$on(b-msg,(data)=>
                        this.b = data;
                    )
                
            
        
    )
</script>
</html>

 

以上是关于Vue2.x 兄弟组件之间的数据传递的主要内容,如果未能解决你的问题,请参考以下文章

vue-兄弟组件传值

uni-app组件之间的通讯--父子/兄弟组件之间传递数据

uni-app组件之间的通讯--父子/兄弟组件之间传递数据

Angular2:通过路由器在兄弟组件之间传递数据?

vue.js 组件之间传递数据

vue.js 组件之间传递数据