当前位置: 首页 > news >正文

vue2脚手架之全局事件总线

 

目录

前言

全局事件总线

原理:

步骤一

main.js:

步骤二

Lqj.vue:

Lqj.vue源码:

解释:

LqjSchool.vue:

 LqjSchool.vue源码:

注意:

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


 

 我是c站的一个小博主,近期我会每天分享前端知识包括(原生的web语句,以及vue2和vue3,微信小程序的写法及知识点)本篇文章收录于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。

全局事件总线

 

原理:

 

可以实现任意组件间的通信
        在main.js开始执行进入app之前,我们定义一个东西用来充当组件之间传递
        数据的一个“中间站”。我们规范的命名为:$bus

步骤一

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

main.js:

new Vue({
                                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>
    <div class="School">
        <h2>学生姓名:{{name}}</h2>
        <h2>学生年龄:{{age}}</h2>
        <button @click="chuandixueshengxingming">把学生姓名传给school组件</button>
    </div>
</template>
<script>
    export default {
        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>
    <div class="School">
        <h2>学校名称:{{name}}</h2>
        <h2>学校地址:{{address}}</h2>
    </div>
</template>
<script>
    export default {
        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

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

 

 只要路飞还在笑,我的生活没烦恼!

相关文章:

  • spring boot学生社团管理系统的设计与实现毕业设计源码151109
  • STM32CUBEMX开发GD32F303(15)----外部中断EXTI
  • 算法竞赛Java选手的语言快速熟悉指南
  • 【电商数仓】数仓搭建之服务数据(data warehouse service-- DWS)层(DWS层概述、几个系统函数和用户主题的建立与数据导入)
  • Window系统安装FFmpeg
  • 青少年python系列 6.循环
  • 向上转型和向下转型
  • 烂大街的TCP/IP网络模型,你真的懂了?
  • 【计算机组成原理】输入/输出系统(一)—— I/O 系统基本概念
  • Linux下PIPE和FORK使用需要注意的一个问题
  • 【第三篇】Camunda系列-整合SpringBoot
  • 读博那些事儿
  • 护士妹才是医院的口
  • 【Vite基础】003-Vite 中使用 TypeScript
  • 英雄联盟用什么语言编写?C/C++ yyds
  • Android 控件背景颜色处理
  • create-react-app项目添加less配置
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java Agent 学习笔记
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • orm2 中文文档 3.1 模型属性
  • Puppeteer:浏览器控制器
  • python3 使用 asyncio 代替线程
  • Sublime text 3 3103 注册码
  • Vue 2.3、2.4 知识点小结
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 基于Android乐音识别(2)
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 利用DataURL技术在网页上显示图片
  • 免费小说阅读小程序
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 用quicker-worker.js轻松跑一个大数据遍历
  • raise 与 raise ... from 的区别
  • 如何在招聘中考核.NET架构师
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​人工智能书单(数学基础篇)
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • $ git push -u origin master 推送到远程库出错
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)EOS中账户、钱包和密钥的关系
  • .NET中两种OCR方式对比
  • /etc/fstab 只读无法修改的解决办法
  • @DataRedisTest测试redis从未如此丝滑
  • @Mapper作用
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Android]How to use FFmpeg to decode Android f...
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [BZOJ1040][P2607][ZJOI2008]骑士[树形DP+基环树]