Vue - 兄弟组件传值

2019-10-17  本文已影响0人  ElricTang

1. 使用中间Vue实例实现兄弟传值。

<!DOCTYPE html>
<html>
    <head>
       <meta charset="UTF-8">
       <title></title>
       <script src='../node_modules/vue/dist/vue.js'></script>
       <script src='../node_modules/vue-resource/dist/vue-resource.js'></script>
    </head>
    <body>
        <div id='app'>
            <child1></child1>
            <child2></child2>
        </div>
        <script>
            var bus = new Vue({ });
            var child1 = {
                template:'<button @click="send">发送数据给子组件child2</button>',
                methods:{
                    send(){
                        bus.$emit('send-data','hello world from child1');
                    }
                }
            };
            var child2 = {
                template:'<p>{{msg}}</p>',
                data(){
                    return {
                        msg:''
                    }
                },
                created(){
                    bus.$on('send-data',this.get);
                },
                methods:{
                    get(data){
                        this.msg = data;
                        console.log(`接收到来自child1的数据-${data}`);
                    }
                }
            };
            var vm = new Vue({
                el:'#app',
                components:{
                    child1,
                    child2
                }
            })
        </script>
    </body>
</html>

2. 借助父组件转发

<!DOCTYPE html>
<html>
    <head>
       <meta charset="UTF-8">
       <title></title>
       <script src='../node_modules/vue/dist/vue.js'></script>
       <script src='../node_modules/vue-resource/dist/vue-resource.js'></script>
    </head>
    <body>
        <div id='app'>
            <child1 @send-data="get"></child1>
            <child2 :message="msg"></child2>
        </div>
        <script>
            var child1 = {
                template:'<button @click="send">发送数据给子组件child2</button>',
                methods:{
                    send(){
                        this.$emit('send-data','hello world from child1');
                    }
                }
            };
            var child2 = {
                template:'<h1>{{message}}</h1>',
                props:{
                    message:String
                }
            };
            var vm = new Vue({
                el:'#app',
                components:{
                    child1,
                    child2
                },
                data:{
                    msg:'',
                },
                methods:{
                    get(data){
                        this.msg = data;
                    }
                }
            })
        </script>
    </body>
</html>

3. 使用Vuex管理状态

上一篇 下一篇

猜你喜欢

热点阅读