美文网首页程序员
vue2.0 兄弟组件(平级)通讯

vue2.0 兄弟组件(平级)通讯

作者: 取个帅气的名字真好 | 来源:发表于2018-01-15 15:22 被阅读126次

    1、前戏吧

    先看看前两篇文章:
    父组件传给子组件
    子组件传给父组件

    看图 看图 看图!!!


    大概原理.png

    个人理解:
    这明显是生活中弟弟打电话给哥哥一样,双方都需要手机,需要信号发射塔。

    • 弟弟 => A组件
    • 哥哥 => B组件
    • 弟弟的手机 => $emit发送数据
    • 哥哥的手机 => $on监听并接收数据
    • 信号发射塔 => 中间事件线
    • App.vue => 不用说都知道是地球

    2、 代码

    2.1、在src/asstes下新建中间事件线ligature.js (注意后缀.js)

    import Vue from 'Vue'
    export default new Vue;
    

    2.2、 在src/components新建A.vue

    <template>
      <div>
        <h2>A组件</h2>
        <button v-on:click="spot">点一下就传</button>
      </div>
    </template>
    <script>
      import bus from '../assets/ligature';
      export default {
        methods: {
          spot: function() {
          //监听A组件中的spot,并发送数据
            bus.$emit("spot", ' 没想到吧!!我是A组件')
          }
        }
      }
    </script>
    

    2.3、在src/components新建B.vue

    <template>
      <div>
        <h2>B组件</h2>
        <p>结果:{{msg}}</p>
      </div>
    </template>
    <script>
      import bus from "../assets/ligature";
      export default {
        data() {
          return {
            msg: "这TMD是默认值除非你点一下上面的按钮"
          };
        },
        mounted() {
          var _this = this;
          //监听A组件中的spot,并接受数据
          bus.$on("spot", function(msg) {
            _this.msg = msg;
          });
        }
      };
    </script>
    <style>
    p{
      font-size: 20px;
      color: darkcyan;
    }
    </style>
    
    

    2.4、 修改App.vue (地球),注册这两个组件,并添加这两个组件的标签

    <template>
      <div id="app">
        <A/>
        <hr>
        <B/>
      </div>
    </template>
    <script>
    import A from './components/A'
    import B from './components/B'
    export default {
      name: 'App',
      components: {
        A,
        B
      }
    }
    </script>
    

    3、效果

    效果图.gif

    相关文章

      网友评论

        本文标题:vue2.0 兄弟组件(平级)通讯

        本文链接:https://www.haomeiwen.com/subject/zyikoxtx.html