首页 > 其他分享 >Vue学习笔记52--全局事件总线

Vue学习笔记52--全局事件总线

时间:2024-03-15 15:35:33浏览次数:22  
标签:Vue -- bus 52 事件 组件 prototype hello

Vue全局事件总线:一种组件之间通信的方式,适用于任意组件之间通信。

1.所有组件,即VueComponent所有的组件实例对象vc 2.每次使用VueComponent都是new一个新的vc 3.Vue.prototype=VueComponent.prototype.__proto__(可以让组件实例对象vc访问到Vue原型上的属性、方法) 4.$emit、$on、$off——都在Vue的原型对象上(Vue.prototype=VueComponent.prototype.__proto__),如下所示: console.log('Vue.prototype==>', Vue.prototype) console.log('VueComponent.prototype.__proto__==>', Vue.prototype) 5.-------------------全局事件总线的应用------------------- 第一步:安装全局事件总线 ==>Vue.prototype.$bus = this 第二步:绑定事件 $on ==>this.$bus.$on('hello', (data) => {      console.log('我是School组件,收到了数据==>', data)    }) 第三步:触发事件 $emit ==>this.$bus.$emit('hello', this.name) 第四步:销毁时间 $off ==> beforeDestroy () {    this.$bus.off('hello')  }, 总结: 1.安装总线在入口 2.绑定事件在需要(那个组件需要数据) 3.触发销毁(事件)在发送(发送数据的组件)

-------------------不建议使用方式了解-------------------

第一步: 可在入口文件main.js中定义全局事件总结,如下所示: Vue.prototype.x = { a: 1, b: 2 } // 不建议使用 Window.y = { a: 1, b: 2, c: 3 } 第二步: 在组件中使用,eg:

-------------------常规使用方式(全局事件总线的应用)-------------------

总结: 1.安装总线在入口 2.绑定事件在需要(那个组件需要数据) 3.触发销毁(事件)在发送(发送数据的组件)   操作步骤如下所示(示例一): 第一步:安装全局事件总线 ==>Vue.prototype.$bus = this main.js:安装总线在入口
// 引入Vue
import Vue from 'vue'
// 引入App
import App from './App.vue'
// 配置提示
Vue.config.productionTip = false

console.log('Vue.prototype==>', Vue.prototype)
console.log('VueComponent.prototype.__proto__==>', Vue.prototype)

// 方式一:
Vue.prototype.x = { a: 1, b: 2 }
// 方式二:不建议使用
Window.y = { a: 1, b: 2, c: 3 }
// 方式三:mydata名词随意 
// const Demo = Vue.extend({})
// const d = new Demo()//vc
// Vue.prototype.mydata = d


new Vue({
  render: h => h(App),
  // 方式四,效果等价于方式三
  beforeCreate () {
    // 安装全局事件总线
    // Vue.prototype.mydata = this
    Vue.prototype.$bus = this
  }
}).$mount('#app')

第二步:绑定事件 $on ==>this.$bus.$on('hello', (data) => {      console.log('我是School组件,收到了数据==>', data)    })

School.vue:绑定事件在需要(那个组件需要数据)

<!-- 组件的结构 -->
<template>
  <div class="school">
    <h3>学校姓名:{{name}}</h3>
    <h3>学校地址:{{ address }}</h3>

  </div>
</template>

<!-- 组件交互相关的代码(数据、方法等) -->
<script>
export default ({
  // eslint-disable-next-line vue/multi-word-component-names
  name: 'School',
  data () {
    return {
      name: '高新一小',
      address: '西安/高新一小'
    }
  },
  mounted () {
    // console.log('School', this.x)
    // console.log('School', Window.y)

    //绑定hello事件
    this.$bus.$on('hello', (data) => {
      console.log('我是School组件,收到了数据==>', data)
    })
  }


})
</script>

<!-- 组件的样式 scoped局部样式,否则多个vue组件中同名会导致样式覆盖(将使用最后一个引入的组件样式)-->
<style scoped>
.school {
  background-color: burlywood;
}
</style>

第三步:触发事件 $emit ==>this.$bus.$emit('hello', this.name)

Student.vue:触发销毁(事件)在发送(发送数据的组件)

<!-- 组件的结构 -->
<template>
  <div class="student">
    <h3>学生姓名:{{name}}</h3>
    <h3>学生性别:{{ sex }}</h3>
    <button @click="sendStudentName">把学生姓名给School组件</button>
  </div>
</template>

<!-- 组件交互相关的代码(数据、方法等) -->
<script>
export default ({
  // eslint-disable-next-line vue/multi-word-component-names
  name: 'Student',
  data () {
    return {
      msg: '我正在学习 Vue',
      name: '心仪',
      sex: '女',
    }
  },
  methods: {
    sendStudentName () {
      // 触发hello事件  提供数据
      this.$bus.$emit('hello', this.name)
    }
  },
  mounted () {
    // console.log('Student', Window.y)

    // 触发hello事件
    // this.$bus.$emit('hello', this.name)
  },
  beforeDestroy () {
    this.$bus.off('hello')
  },

})
</script>

<!-- 组件的默认样式 css写法 -->
<!-- <style scoped>
.demo {
  background-color: cadetblue;
}
</style> -->

<style lang="less" scoped>
.student {
  background-color: cadetblue;
  .myfontsize {
    font-size: 40px;
  }
}
</style>

第四步:销毁时间 $off ==> beforeDestroy () {    this.$bus.off('hello')  },

Student.vue:触发销毁(事件)在发送(发送数据的组件)

总结:

 

标签:Vue,--,bus,52,事件,组件,prototype,hello
From: https://www.cnblogs.com/YYkun/p/18073085

相关文章

  • dns 用户访问网站原理
    接下来一个大环节,就是学习网站的所有知识点了用户访问网站,主要分两大块知识点客户端输入www.yuchaoit.cn后,是如何看到网页的,其中原理流程服务端是如何提供网站服务的?其中原理流程浏览器输入网址后发生了什么这是一个经典的问题,通过回答的细致程度,可以判断出,小白、新手、中......
  • [原创] KCP 源码分析(上)
    KCP协议是一种可靠的传输协议,对比TCP取消了累计确认(延迟ACK)、减小RTO增长速度、选择性重传而非全部重传。通过用流量换取低时延。KCP中最重要的两个数据结构IKCPCB和IKCPSEG,一个IKCPCB对应一个KCP连接,通过这个结构体维护发送缓存、接收缓存、超时重传时间、窗口大小等。I......
  • IRS通关秘笈 - 2 - 初见利率互换IRS
    一、什么是利率互换IRS?每一笔利率互换交易是交易双方约定在特定的时间频率,交换以名义本金为基准计算的浮动与固定利率的金额。IRS的“买方”每一个支付日支付以固定利率、计息基准、名义本金计算的利息,IRS的“卖方”则每一个支付日支付以浮动利率、计息基准、名义本金计算的利......
  • Linux - 报错“Address already in use”解决方案
    报"Addressalreadyinuse",如下图所示:错误原因:某程序正在使用端口。(这里我使用的是端口“8888”)可以通过命令查看所有正在使用的端口:netstat-tunllp 解决方案1.找到占用该端口的进程号使用命令:sudonetstat-anp|grep"8888"(端口号)可以看到进程号为8888的serv......
  • RabbitMq 集成到 SpringBoot
    1.最低配置使用1.添加依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.3.2.RELEASE</version></dependency><dependency>&......
  • 【人才梯队建设】某系统集成企业技术人才梯队建设项目纪实
    ——量化工作饱和度,建设虚拟金字塔形技术梯队与很多企业一样,为了适应公司规模的扩大和业务增长的需要,该公司扩建了技术团队,但是技术人员之间的分工仍比较混乱,虽然人数多了,但是业绩仍然上不去,企业徒增了人工成本。另一方面,新进的技术人员有很多是刚毕业的大学生,能力、经验都有......
  • 【绩效管理】某交通投资集团绩效管理体系搭建项目纪实
    ——引入淘汰机制,强化考核力度“绩效考核”一直被封为企业管理的“尚方宝剑”,一提到企业管理有问题,很多企业管理者就想用绩效考核来解决,但是,在实际中,绩效考核“走形式”、“大锅饭”现象、员工抱怨不公平等问题普遍存在在大多中国企业中,往往企业花了很多心思和精力开展绩效考......
  • 如何提取企业年报中表格的数据?-使用camelot库
     参考资料链接:Python解析pdf表格|Camelot库(完胜)VSPdfplumber库一、表格在单独一页的情况importcamelotpdf=r"C:\Users\ziyao\Desktop\pythonforwork\办公\work1\2018年10月全国城市空气质量报告.pdf"table=camelot.read_pdf(pdf,pages='11')print(table)#查看该......
  • React-hook-form-mui(二):表单数据处理
    前言在上一篇文章中,我们介绍了react-hook-form-mui的基础用法。本文将着表单数据处理。react-hook-form-mui提供了丰富的表单数据处理功能,可以通过watch属性来获取表单数据。Demo下面是一个使用watch属性的例子:importReactfrom'react';import{useForm}from're......
  • SSH登录失败报错Permission denied (publickey)的解决方法
    SSH(SecureShell)是一种加密的网络协议,用于在网络上安全地传输数据。它被广泛用于远程登录和执行命令。然而,有时候当我们尝试使用SSH登录时,可能会遇到错误消息Permissiondenied(publickey)导致登录失败。这种情况可能由多种原因引起。在本文中,我们将探讨导致SSH登录失败的......