• Vue.js全局事件总线(用于任意组件之间的通信)


    饮水思源:https://www.bilibili.com/video/BV1Zy4y1K7SH?p=85&spm_id_from=pageDriver

    这是一个便于组件之间通信的办法(适合于任意组件之间!),是由程序员总结而来,并非官方的API

    基本原理是借助一个全局对象,进行通信。

    ①效果演示

    大儿子和小儿子是兄弟组件。

    ②安装全局事件总线

    main.js:

    import Vue from 'vue'
    import App from './App.vue'
    
    Vue.config.productionTip = false
    
    new Vue({
      render: h => h(App),
      beforeCreate() {
        Vue.prototype.$bus = this; // 这个$bus可以换其它名字
      },
    }).$mount('#app')

    ③使用全局事件总线

    <template>
      <div>
        <SonA />
        <SonB />
      </div>
    </template>
    
    <script>
    import SonA from './components/SonA.vue'
    import SonB from './components/SonB.vue'
    
    export default {
      name: 'App',
      components: {
        SonA,
        SonB,
      }
    }
    </script>
    
    <style>
    
    </style>
    App.vue

    接听方:

    <template>
      <div>
          <h1>大儿子</h1>
          <div>收到来自SonaLine的消息:{{msg}}</div>
      </div>
    </template>
    
    <script>
    
    export default {
      name: 'SonA',
      data() {
          return {
              msg: '',
          }
      },
      methods: {
          handleMsgFromSonaLine(msg) {
            this.msg = msg
          },
      },
      mounted() {
        this.$bus.$on('SonaLine', this.handleMsgFromSonaLine);    
      },
      beforeDestroy() {
        this.$bus.$off('SonaLine')
      },
    }
    </script>
    
    <style scoped>
        div {
            background-color: aqua;
        }
    </style>

    发送方:

    <template>
      <div>
          <h1>小儿子</h1>
          <input v-model="msg">
          <button @click="sendDataToSonA">发数据给大儿子</button>
      </div>
    </template>
    
    <script>
    
    export default {
      name: 'SonB',
      data() {
        return {
          msg: '',
        }
      },
      methods: {
        sendDataToSonA() {
          this.$bus.$emit('SonaLine', this.msg)
        } 
      },
    }
    </script>
    
    <style>
        div {
            background-color: yellow;
            margin-top: 20px;
        }
    </style>

    最好在beforeDestroy中,解绑当前组件所用到的事件

  • 相关阅读:
    ScRegSetValueExW 调用无法运行 Type: 拒绝访问
    Windows Server 2016在服务器管理器仪表板中下载Maps Manager延迟启动红色
    no crontab for root
    SqlException: Invalid column name 'Rating'
    sqlserver游标模板
    JS屏蔽右键菜单刷新或F5刷新页面
    动态修改webconfig
    微信小程序常见的UI框架/组件库总结
    sql连表更新
    web弹出层框架 -- layer
  • 原文地址:https://www.cnblogs.com/xkxf/p/15876613.html
Copyright © 2020-2023  润新知