zoukankan      html  css  js  c++  java
  • Vue 组件&组件之间的通信 之 非父子关系组件之间的通信

    Vue中不同的组件,即使不存在父子关系也可以相互通信,我们称为非父子关系通信;

    我们需要借助一个空Vue实例,在不同的组件中,使用相同的Vue实例来发送/监听事件,达到数据通信的目的;

    实例:

    初始加载界面:

    初始界面代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>非父子关系组件之间的通信</title>
    </head>
        <body>
            <div >
                <my-component-a></my-component-a>
                <my-component-b></my-component-b>
            </div>
        </body>
    
        <template id="template-a">
            <div>
                <h1>my-component-a</h1>
                
                <hr />
            </div>
        </template>
        
        <template id="template-b">
            <div>
                <h2>my-component-b</h2>
                
                <hr />
            </div>
        </template>
    
        <script type="text/javascript" src="../js/vue.js" ></script>
        <script type="text/javascript">
        
            let comA = {
                template :  "#template-a",
            
            
            }
            
            let comB = {
                template :  "#template-b",
                
        
            }
        
            
            new Vue({
                data : {
                    
                },
                components : {
                    "my-component-a" : comA,
                    "my-component-b" : comB
                }
            }).$mount("div");
        
        </script>
    </html>

    使用监听事件后:

     添加的监听事件的代码:

        let comA = {
                template :  "#template-a",
                data(){
                    return {
                        name:'perfect'
                    }
                },
                methods:{
                    
                    sendData(){
                        vm.$emit('send-event-a',this.name);
                    }
                }
            
            
            }
            
            let comB = {
                
                data(){
                    return{
                        nameB:''
                    }
                },
                template :  "#template-b",
                mounted(){
                    
                    vm.$on('send-event-a',name=>{//监听数据
                            console.log(this);
                        
                        this.nameB=name;
                    })
                }
                
        
            }
            let vm=new Vue({
                
                data:{
                    msg:'cool'
                }
            });
        
            
            new Vue({
                data : {
                    
                },

    调用事件部分:

    <template id="template-a">
            <div>
                <h1>my-component-a</h1>
                comA name:<span>{{name}}</span>
                <button @click="sendData">发送数据给comB</button>
                
                <hr />
            </div>
        </template>
        
        <template id="template-b">
            <div>
                <h2>my-component-b</h2>
                comB name:<span>{{nameB}}</span>
                
                <hr />
            </div>
        </template>

    最终代码:

     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>非父子关系组件之间的通信</title>
     6 </head>
     7     <body>
     8         <div >
     9             <my-component-a></my-component-a>
    10             <my-component-b></my-component-b>
    11         </div>
    12     </body>
    13 
    14     <template id="template-a">
    15         <div>
    16             <h1>my-component-a</h1>
    17             comA name:<span>{{name}}</span>
    18             <button @click="sendData">发送数据给comB</button>
    19             
    20             <hr />
    21         </div>
    22     </template>
    23     
    24     <template id="template-b">
    25         <div>
    26             <h2>my-component-b</h2>
    27             comB name:<span>{{nameB}}</span>
    28             
    29             <hr />
    30         </div>
    31     </template>
    32 
    33     <script type="text/javascript" src="../js/vue.js" ></script>
    34     <script type="text/javascript">
    35     
    36         let comA = {
    37             template :  "#template-a",
    38             data(){
    39                 return {
    40                     name:'perfect'
    41                 }
    42             },
    43             methods:{
    44                 
    45                 sendData(){
    46                     vm.$emit('send-event-a',this.name);
    47                 }
    48             }
    49         
    50         
    51         }
    52         
    53         let comB = {
    54             
    55             data(){
    56                 return{
    57                     nameB:''
    58                 }
    59             },
    60             template :  "#template-b",
    61             mounted(){
    62                 
    63                 vm.$on('send-event-a',name=>{//监听数据
    64                         console.log(this);
    65                     
    66                     this.nameB=name;
    67                 })
    68             }
    69             
    70     
    71         }
    72         let vm=new Vue({
    73             
    74             data:{
    75                 msg:'cool'
    76             }
    77         });
    78     
    79         
    80         new Vue({
    81             data : {
    82                 
    83             },
    84             components : {
    85                 "my-component-a" : comA,
    86                 "my-component-b" : comB
    87             }
    88         }).$mount("div");
    89     
    90     </script>
    91 </html>
    非父子关系组件之间的通信
  • 相关阅读:
    (critical) chassis-frontend.c:122: Failed to get log directory, please set by --log-path
    Zabbix MySQL percona 模板部署
    shell编程
    pt-online-schema-change
    Haproxy + Keepalived +PXC 常见错误
    c/c++获取系统时间函数
    《C++ Concurrency in Action》
    C++多线程学习资料参考
    C++11多线程教学
    软件学习网站
  • 原文地址:https://www.cnblogs.com/jiguiyan/p/10778808.html
Copyright © 2011-2022 走看看