• Vue 组件通信(组件间通信)


    1、中央事件总线bus

    <!DOCTYPE html>
    <html lang="zh">
    
        <head>
            <meta charset="UTF-8" />
            <title>Vue</title>
        </head>
    
        <body>
            <div id="app">
                <p>{{message}}</p>
                <my-component></my-component>
    
            </div>
            <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
            <script type="text/javascript">
                var bus = new Vue();
                Vue.component('my-component', {
                    template: `<button @click="handleEvent">传递事件</button>`,
                    methods: {
                        handleEvent: function() {
                            bus.$emit('on-message', '来自组件my-component的内容')
                        }
                    }
                })
                new Vue({
                    el: "#app",
                    data: {
                        message: ''
                    },
                    mounted: function() {
                        var _this = this;
                        //监听来自bus实例的事件
                        bus.$on('on-message', function(msg) {
                            _this.message = msg;
                        })
                    }
                })
            </script>
        </body>
    
    </html>

    2、父链

    <!DOCTYPE html>
    <html lang="zh">
    
        <head>
            <meta charset="UTF-8" />
            <title>Vue</title>
        </head>
    
        <body>
            <div id="app">
                <p>{{message}}</p>
                <my-component></my-component>
            </div>
            <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
            <script type="text/javascript">
                Vue.component('my-component', {
                    template: `<button @click="handleEvent">通过父链修改数据</button>`,
                    methods: {
                        handleEvent: function() {
                            this.$parent.message = '来自组件my-component的内容'
                        }
                    }
                })
                new Vue({
                    el: "#app",
                    data: {
                        message: ''
                    }
                })
            </script>
        </body>
    
    </html>

    注:尽量少用,父子组件最好通过props和$emit来通信

    3、子组件索引

    <!DOCTYPE html>
    <html lang="zh">
    
        <head>
            <meta charset="UTF-8" />
            <title>Vue</title>
        </head>
    
        <body>
            <div id="app">
                <button @click="handleRef">获取子组件内容</button>     
                <p>父组件:{{message}}</p>
                <my-component ref='comA'></my-component>
            </div>
            <script src="https://cdn.bootcss.com/vue/2.5.9/vue.min.js"></script>
            <script type="text/javascript">
                Vue.component('my-component', {
                    template: '<div>子组件</div>',
                       data:function(){
                           return {
                               message:'子组件内容'
                           }
                       }
                });
                new Vue({
                    el: "#app",
                    data:{
                        message:''
                    },
                       methods:{
                           handleRef:function(){
                               var msg = this.$refs.comA.message;     
                               this.message = msg;
                           }
                       }
                })
            </script>
        </body>
    
    </html>

    注:仅仅作为直接访问子组件的应急方案,避免在模板或者计算属性中使用$refs.

  • 相关阅读:
    CSS3实现小黄人动画
    CSS3实现时间轴效果
    CSS3实现8种Loading效果【二】
    Delphi面向对象的编程思想
    delphi 格式转换
    FindWindow和FindWindowEx函数使用
    delphi TStringList 用法详解
    ExtractFileDir 与 ExtractFilePath 的区别
    C++模板与群体数据
    C++多态性
  • 原文地址:https://www.cnblogs.com/mengfangui/p/8058093.html
Copyright © 2020-2023  润新知