首页 > 其他分享 >vue之间的传值问题---6eventbus 可以实现兄弟组件通信

vue之间的传值问题---6eventbus 可以实现兄弟组件通信

时间:2024-10-14 14:32:11浏览次数:7  
标签:vue val --- 事件 clientList 组件 6eventbus event elementValue

1.传递数据的组件:通过eventbus中的方法$emit来发布自定义事件,并且传递数据
2.接收数据的组件: 通过eventbus中的方法$on来订阅事件,并通过回调函数接收数据

// 手写发布订阅模式
class EventBus {
  // 记录事件和回调
  clientList = {
    send: [() => {}, () => {}],
  }
  // 订阅事件,参数event事件名,callback 回调
  $on = function (event, callback) {
    // 将事件和函数记录
    // 如果事件记录过,那就将回调push
    if (this.clientList[event]) {
      this.clientList[event].push(callback)
    } else {
      this.clientList[event] = [callback]
    }
  }
 
  $emit = function (event, val) {
    if (!this.clientList[event]) {
      throw new Error(event + ' is not a event')
    }
    this.clientList[event].forEach((cb) => {
      cb(val)
    })
  }
}
 
const eventBus = new EventBus()
 
// 订阅事件
eventBus.$on('send', (val) => {
  console.log('send订阅' + val)  获取
})
 
eventBus.$emit('send', 1)  传值

使用案例:

// 公公bus.js
//bus.js
import Vue from 'vue'
export default new Vue()

组件A(传值的页面)
<template>
  <div>
    A组件:
    <span>{{elementValue}}</span>
    <input type="button" value="点击触发" @click="elementByValue">
  </div>
</template>
<script>
  // 引入公共的bug,来做为中间传达的工具
  import Bus from './bus.js'
  export default {
    data () {
      return {
        elementValue: 4
      }
    },
    methods: {
      elementByValue () {
        Bus.$emit('val', this.elementValue)
      }
    }
  }
</script>

组件B (接收值的页面)

<template>
  <div>
    B组件:
    <input type="button" value="点击触发" @click="getData">
    <span>{{name}}</span>
  </div>
</template>
<script>
  import Bus from './bus.js'
  export default {
    data () {
      return {
        name: 0
      }
    },
    mounted () {
      // 用$on事件来接收参数
      Bus.$on('val', elementValue => {
        console.log(elementValue)
        vm.name = elementValue
      })
    },
    methods: {
      getData () {
        this.name++
      }
    }
  }
</script>






标签:vue,val,---,事件,clientList,组件,6eventbus,event,elementValue
From: https://www.cnblogs.com/baozhengrui/p/18464115

相关文章

  • vue之间的传值问题---2.vuex
    通过Vuex进行状态管理:是一个专为Vue.js应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。在Vuex中传递对象时,应该注意不直接传递对象的引用,1).安装Vuexnpminstallvuex--save2).然后在src......
  • aardio入门到精通05-名字空间
    名字空间importconsole;/*名字空间组织、归类、标识一组具名对象的名字,是模块化编程的重要基础。1.var定义的局部变量有保护变量的作用,其它文件不能调用2.成员变量是名字空间里的变量,加前缀名字空间名来访问,在全局名字空间里可以不加前缀名字空间名3.不同的名字空间,相......
  • js-将JSON 字符串转换为JavaScript 对象(JSON.parse)
    1.背景//JSON字符串constjsonString='{"name":"张三","age":30,"city":"北京"}';获取name值2.JSON字符串进行转换为JS对象将JSON字符串转换为JavaScript对象(JSON.parse(jsonString))//JSON字符串constjsonString='......
  • Vue2用户中心页面开发教程:从零开始,用HTML、CSS和Vue构建新手友好的个人中心页面,提供完
    效果图:使用Vue.js构建用户中心页面:从零到实现在本教程中,我们将使用Vue.js构建一个用户中心页面,这是一个常见的Web应用页面。我们将涵盖页面的布局、样式,以及Vue的基本数据绑定和事件处理功能。这是一个为前端新手量身定制的项目,通过此项目可以了解如何快速构建用户友好......
  • 基于Node.js+vue汉服店铺分享系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景在传统文化复兴的浪潮中,汉服作为中华民族传统文化的重要组成部分,近年来受到了越来越多年轻人的追捧和喜爱。随着汉服文化的普及,市场上涌现出了大量的汉服店......
  • 基于Node.js+vue高校党务系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和高校党务工作的日益复杂化,传统的手工管理方式已难以满足当前高校党务工作的需求。高校党务工作涉及学院、专业、班级等多个层级,以......
  • 基于Node.js+vue飞机订票管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着全球航空业的蓬勃发展,飞机出行已成为人们日常出行的重要方式之一。然而,传统的飞机订票方式,如通过电话、柜台等,不仅效率低下,而且容易出错。同时,随着移动......
  • 基于Node.js+vue公司员工管理系统的设计与实现(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着企业规模的扩大和业务的复杂化,公司员工管理成为了企业管理中的一项重要任务。传统的人工管理方式不仅效率低下,而且容易出错,无法满足现代企业对员工管理......
  • ubuntu20.04 ros noetic cv4 编译sg-slam问题汇总
    1.CV_RGB2GRAY2.CV_MINMAX3.CV_RGB2GRAY4.CV_FILLED引入头文件include<opencv2/imgproc/types_c.h>include<opencv2/opencv.hpp>include<opencv2/highgui/highgui_c.h>include<opencv2/imgproc/imgproc_c.h>或者1和3将CV_改为cv::COLOR_5.fatalerro......
  • mybatis入门案例-传参类型和方式
    mybatis传参类型和方式主要分享一下mybatis的mapper接口参数类型和传参方式,适用于初学者。直接上代码:pom.xml文件<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta......