首页 > 其他分享 >Vue学习笔记(十):全局事件总线

Vue学习笔记(十):全局事件总线

时间:2023-10-13 11:33:49浏览次数:39  
标签:Vue name 总线 笔记 事件 组件 id

   

之前博客中介绍了prop和调用事件的方式在父-子组件之间进行数据,这种方式在只有一层嵌套层时可以使用,但是路过存在多层嵌套,多层多个“兄弟”组件之间传递数据,就非常麻烦。对此,vue中提供了一种全局事件总线机制,数据传递是通过一个空的Vue实例作为中央事件总线,通过它来触发事件和监听事件,可以实现几乎任何组件间的通信,这在一些比较小的项目中是非常好用的。

   

全局事件总线相当于一个公共空间,任何组件都可以将事件绑定到其中,任何其他组件都可以去出发绑定到这个公共空间的方法,实现组件之间的数据交互。

   

使用全局事件总线之前,需要在main.js中进行安装:

//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false

//创建vm
new Vue({
    el:'#app',
    render: h => h(App),
    beforeCreate() {
    	Vue.prototype.$bus = this //安装全局事件总线
    },
})
   

组件将事件绑定到全局事件总线中:

<template>
    <div class="demo2">
        <hello1 
        v-for="per in persons"
        :key="per.id"
        :perObj=per
        >
        </hello1>
    </div>
</template>

<script>
import hello1 from './hello1.vue'
    export default {
        name: 'hello2',
        data(){
            return {
                persons: [
                    { id: 1, name: '张三', age: 23 },
                    { id: 2, name: '李四', age: 34 },
                    { id: 3, name: '王五', age: 45 }
                ]
            }
        },
        components:{
            hello1
        },
        mounted() {
            this.$bus.$on('changeAge1', (id)=>{   // 将事件changeAge1添加到事件总线中
                this.persons.forEach((per)=>{
                    if(per.id === id) per.age += 1
                });
                console.log('id值为:', id, 'age值加1')
            })
        }
    }
</script>
   

其他组件触发事件总线中的事件,实现数据交互:

<template>
    <div class="demo1">
        <h4>{{perObj.name}} 的年龄是:{{perObj.age}}</h4>
        <!-- 此处调用从父组件中传过来的函数 -->
        <button @click="changeAge2(perObj.id)">修改年龄</button>
    </div>
</template>

<script>
    export default {
        name: 'hello1',
        props:['perObj'],
        methods: {
            changeAge2(id){
                this.$bus.$emit('changeAge1', id)
            }
        },
    }
</script>

标签:Vue,name,总线,笔记,事件,组件,id
From: https://www.cnblogs.com/chenhuabin/p/17761695.html

相关文章

  • vue - alias
    3.别名alias配置:build\webpack.base.conf.js:module.exports={...,resolve:{extensions:['.js','.vue','.json'],alias:{'@':resolve('src'),'common':resolve('src......
  • python学习笔记3 遍历目录, 列出文件名
    importosdeflistDir(curPath,pixLen):list=[]#print("当前路径:"+curPath)files=os.listdir(curPath)forpathinfiles:fullPath=os.path.join(curPath,path)ifos.path.isfile(fullPath):#append......
  • 安装NVIDIA,CUDA, cuDNN的个人笔记
    安装nvdian:sudochmod+xNVIDIA-Linux-X86_64-440.100.runsudo./NVIDIA-Linux-X86_64-440.100.run-no-x-check在后面加上不对Xserver进行检查的命令(红色)就可以安装成功!  查看INVIDIAlspci-v-s`lspci|awk'/VGA/{print$1}'`  安装cuda网站:https://develop......
  • 《Mastering the FreeRTOS Real Time Kernel》读书笔记(3)队列管理
    4.队列管理队列,在一些系统中被称为消息队列,可以理解为信息中转站。是任务和任务,任务和中断之间可以互相读和写的一个共享空间。4.2队列的特征存储数据队列本质上是一个先进先出的缓冲区(FIFO),所以可以存储一定容量的数据。有两种方式可以实现FIFO队列:1.将发送给队列的数据复......
  • vue el-select/el-cascader获取选中的对象label值
    1.el-select获取选中对象label值<el-form-itemlabel="车辆配置"prop="sales_name"><el-selectv-if="!showSaleNameInput"v-model="form.sales_name"clearableref="itemSelect"......
  • 2. Vue简介
    三大问题(是什么,为什么,怎么办):Vue是帮助前端优化开发的一个工具,是一个框架渐进式框架的概念Vue2-->Vue3......
  • Vue监听路由的变化
    方式一:watch监听通过watch监听,当路由发生变化的时候执行watch:{$route(to,from){console.log(to.path);}},//或者watch:{$route:{handler:function(val,oldVal){console.log(val);},//深度观察监听deep:true}},//......
  • Linux笔记:增量备份程序rsync快速入门
    目的rsync是一款开源的文件增量备份程序,通常用于linux下文件的增量备份。这个程序可以将一个目录的文件备份到另一个目录中,并且在每次备份时还可以对文件进行比较,只复制更新有过改动的文件。rsync官网:https://rsync.samba.org/github项目:https://github.com/WayneD/rsync 快......
  • 算法学习笔记(30):Kruskal 重构树
    Kruskal重构树这是一种用于处理与最大/最小边权相关的一个数据结构。其与kruskal做最小生成树的过程是类似的,我们考虑其过程:按边权排序,利用并查集维护连通性,进行合并。如果我们在合并时,新建一个节点,其权值为当前处理的边的权值,并将合并的两个节点都连向新建的节点,那么就......
  • 阅读笔记:《软件需求分析》阅读笔记二
    软件需求分析的概念:软件需求分析是软件开发过程中的关键步骤。它涉及识别和定义系统或应用程序的功能、性能和约束,以确保开发团队和利益相关者都理解项目的范围和目标。需求分析帮助消除歧义,降低风险,提高项目交付的质量。需求获取:需求的获取是需求分析的起点。这涉及与各种利益相......