vue2脚手架之全局事件总线

简介: vue2脚手架之全局事件总线

前言

vue脚手架的作用是用来自动一键生成vue+webpack的项目模版,包括依赖库,免去你手动安装各种插件,寻找各种cdn并一个个引入的麻烦。vue脚手架指的是vue-cli,它是一个专门为单页面应用快速搭建繁杂的脚手架,它可以轻松的创建新的应用程序而且可用于自动生成vue和webpack的项目模板。vue-cli是有Vue提供的一个官方cli,专门为单页面应用快速搭建繁杂的脚手架。它是用于自动生成vue.js+webpack的项目模板,是为现代前端工作流提供了 batteries-included 的构建设置。只需要几分钟的时间就可以运行起来并带有热重载,保存时 lint 校验,以及生产环境可用的构建版本是一个快速构建 vue 项目的工具,通过他,我们可以将 vue 所需要的插件安装完成。vue-cli这个构建工具大大降低了webpack的使用难度,支持热更新,有webpack-dev-server的支持,相当于启动了一个请求服务器,给你搭建了一个测试环境,只关注开发就OK。

全局事件总线

image.png

原理:

image.png

可以实现任意组件间的通信

        在main.js开始执行进入app之前,我们定义一个东西用来充当组件之间传递

        数据的一个“中间站”。我们规范的命名为:$bus


步骤一

我们应该现在main.js中创建一个东西,这个东西我们用来接收所有的数据传输,

我们一般把这个东西写成$bus

main.js:

newVue({
render: h=>h(App),
beforeCreate(){
Vue.prototype.$bus=this//安装全局事件总线                                }
                        }).$mount('#app')
// 这里因为beforeCreate这个生命周期函数是在所有生命周期之上(最开始的一个生命周期钩子)// 他身上的this就是new Vue所以这里我们直接把this赋值给要做傀儡(全局事件的“中间站”):$bus

步骤二

先说明一下我们这里是要把Lqj.vue中的学生姓名这个数据参数通过全局事件总线的方式转递给Lqjschool.vue,并在Lqjschool中将传递过来的学生姓名这个数据参数打印在控制台!

Lqj.vue:

1.我们应该现在Lqj.vue身上创建一个button按钮绑定一个点击事件“chuandixueshengxingming

<button@click="chuandixueshengxingming">把学生姓名传给school组件</button>

2.在script中将"chuandixueshengxingming"绑定的点击事件写逻辑事件:

methods:{
chuandixueshengxingming(){
this.$bus.$emit('hello',this.name)
                                }
                        }

Lqj.vue源码:

<template><divclass="School"><h2>学生姓名:{{name}}</h2><h2>学生年龄:{{age}}</h2><button@click="chuandixueshengxingming">把学生姓名传给school组件</button></div></template><script>exportdefault {
name:'LqjSchool',
data(){
return{
name:'lqj',
age:20            }
        },
methods:{
chuandixueshengxingming(){
this.$bus.$emit('hello',this.name)
            }
        }
    }
</script><style>.School{
background: gray;
    }
</style>

解释:

$bus是在main.js创建的全局事件总线。因为这是Lqj.vue组件时需要提供一个数据参数传递给Lqjschool.vue中的学生姓名这个数据参数通过全局事件总线的方式转递给Lqjschool的

所以要用this.$bus.$emit('xxx',this.demo)提供本组件的数据参数!


LqjSchool.vue:

我们需要在LqjSchool.vue身上写入一个接收全局总线的事件:

this.$bus.$on('hello',(data)=>{
console.log('我是school组件,我收到了数据:',data)
                })

LqjSchool.vue源码:

<template><divclass="School"><h2>学校名称:{{name}}</h2><h2>学校地址:{{address}}</h2></div></template><script>exportdefault {
name:'LqjSchool',
data(){
return{
name:'lqj学校',
address:'济南',
            }
        },
mounted(){
// console.log("school",this)this.$bus.$on('hello',(data)=>{
console.log('我是school组件,我收到了数据:',data)
            })
        },
// // beforeDestroy(){//     this.$bus.$off('hello')// }    }
</script><style>.School{
background: gray;
    }
</style>

注意:

提供数据时用$emit,接收数据时用$on

当我们点击按钮时结果展示:

image.png

目录
相关文章
|
1月前
|
JavaScript
Vue学习之--------全局事件总线(2022/8/22)
这篇文章介绍了Vue中全局事件总线(GlobalEventBus)的概念和使用方法,它允许不同组件之间进行通信。文章通过图解和代码实例详细解释了如何安装全局事件总线、在组件中接收和提供数据,以及如何在组件销毁前解绑事件,以避免潜在的内存泄漏问题。
Vue学习之--------全局事件总线(2022/8/22)
|
4月前
|
JavaScript
解释 Vue 的事件总线和 emits 属性。
解释 Vue 的事件总线和 emits 属性。
55 3
|
4月前
|
JavaScript
在Vue中,如何使用事件总线来传递数据和触发事件?
在Vue中,如何使用事件总线来传递数据和触发事件?
63 0
|
4月前
|
JavaScript 程序员
Vue中的全局事件总线是什么?如何使用?
Vue中的全局事件总线是什么?如何使用?
60 0
|
4月前
|
JavaScript 前端开发 API
从入门到项目实战 - VUE组件跨通信:vue2 与 vue3 中实现全局事件总线
从入门到项目实战 - VUE组件跨通信:vue2 与 vue3 中实现全局事件总线
285 0
|
4月前
【Vue2.0学习】—全局事件总线GlobalEventBus(六十一)
【Vue2.0学习】—全局事件总线GlobalEventBus(六十一)
|
9月前
|
JavaScript
Vue全局事件总线(任意组件间通信)
Vue全局事件总线(任意组件间通信)
|
9月前
【Vue2.0】— 全局事件总线GlobalEventBus(十九)
【Vue2.0】— 全局事件总线GlobalEventBus(十九)
|
JavaScript
Vue(Vue2+Vue3)——44.全局事件总线、45.TodoList案例_事件总线
Vue(Vue2+Vue3)——44.全局事件总线、45.TodoList案例_事件总线
|
JavaScript
[Vue]全局事件总线
[Vue]全局事件总线