IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue 兄弟组件传值之eventBus -> 正文阅读

[JavaScript知识库]vue 兄弟组件传值之eventBus

兄弟组件传值可以用 vuex 或者 eventBus,这里介绍eventBus。

方法一:

创建一个单独的js文件event.js,内容如下

import Vue from 'vue'
export default new Vue

假如父组件如下:

<template>
     <components-a></components-a>
     <components-b></components-b>
</template>

子组件a如下:

<template>
      <div class="components-a">
           <button @click="abtn">A按钮</button>
      </div>
</template>
<script>
import eventVue from '../../js/event.js'
export default {
      name: 'app',
      data () {
        return {
                'msg':"我是组件A"
        }
      },
      methods:{
           abtn(){
                   eventVue.$emit("myFun",this.msg)   //$emit这个方法会触发一个事件
           }
      }
}
</script>

子组件b如下:

<template>
     <div class="components-a">
         <div>{{btext}}</div>
     </div>
</template>
<script>
import eventVue from '../../js/event.js'
export default {
   name: 'app',
   data () {
        return {
           'btext':"我是B组件内容"
        }
   },
   created:function(){
       this.bbtn();
   },
   methods:{
       bbtn(){
            eventVue.$on("myFun",(message)=>{   //这里最好用箭头函数,不然this指向有问题
                 this.btext = message      
            })
       }
    }
}
</script>

方法二:方法一的变种

省略了外部的js文件,直接把总线放在main.js里的vue实例中,写法如下:

new Vue({
    el: "#app",
    router,
    data: {
        eventVue: new Vue()
    },
    template: "<App/>"
    compnents: {App}
})

在使用的时候,不需要引入外部文件,只需要在Bus前加this.$root,即可调用。

子组件a如下:

methods:{
   abtn(){
           this.$root.eventVue.$emit("myFun",this.msg)   //$emit这个方法会触发一个事件
   }
}

子组件b:

methods:{
   bbtn:function(){
        this.$root.eventVue.$on("myFun",(message)=>{   //这里最好用箭头函数,不然this指向有问题
             this.btext = message      
        })
   }
}

方法三:和上面同理写法不一样,增加了移除事件的方法

创建一个单独的js文件event.js,内容如下:

const install = function (Vue) {
  const EventBus = new Vue({
    methods: {
      emit(event, ...args) {
        this.$emit(event, ...args)
      },
      on(event, callback) {
        this.$on(event, callback)
      },
      off(event, callback) {
        this.$off(event, callback)
      }
    }
  })
  if (typeof window !== 'undefined') {
    window.$bus = EventBus
  }
  Vue.prototype.$bus = EventBus
}
export default install

子组件a里面触发一个事件:

handleClick(msg) {
      this.$bus.$emit('assetTypeCodeChange', msg)
    },

子组件b 接受这个事件,并在组件销毁时移除事件:

created() {
    this.$bus.$on('assetTypeCodeChange', code => {
      console.log(code)
    })
  },
  beforeDestroy() {
    this.$bus.$off('assetTypeCodeChange')
  },
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:15:56  更:2021-09-02 11:17:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 20:25:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计