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

北京网站建设团队长沙市做网站的网站

北京网站建设团队,长沙市做网站的网站,网站建设流程信息,龙岩城乡建设局网站Vue3中采用EventBus方式进行组件间通信与Vue2有一定区别 1.创建EventBus 在Vue2中#xff0c;我们可以在main.js中创建一个全局的EventBus#xff0c;代码如下#xff1a; // EventBus.js import Vue from vue const EventBus new Vue() export default EventBus// main.… Vue3中采用EventBus方式进行组件间通信与Vue2有一定区别 1.创建EventBus 在Vue2中我们可以在main.js中创建一个全局的EventBus代码如下 // EventBus.js import Vue from vue const EventBus new Vue() export default EventBus// main.js import EventBus from ./EventBus Vue.prototype.$bus EventBus在Vue3中我们需要使用createApp来创建Vue实例并使用provide和inject来创建全局的EventBus代码如下 // EventBus.js import { createApp } from vue const app createApp({}) const EventBus app.provide(EventBus, new app()) export default EventBus// main.js import EventBus from ./EventBus createApp(App).use(EventBus).mount(#app)----------------- // 在 main.js 或入口文件中 import { createApp, provide } from vue; import App from ./App.vue;const app createApp(App); const eventBus createApp({});// 将 eventBus 实例作为提供者提供给子组件 app.provide(eventBus, eventBus);app.mount(#app);2.使用EventBus进行通信 在Vue2中我们可以通过$emit和$on方法来进行通信代码如下 // 发送通信 this.$emit(event, data)// 接收通信 this.$on(event, (data) {console.log(data) })// 销毁 this.$off(event) 在Vue3中我们可以通过$emit和$on方法来进行通信但是需要在组件中使用AppContext来获取EventBus代码如下 // 发送通信 const app getCurrentInstance().appContext.app app.config.globalProperties.$EventBus.emit(event, data)// 接收通信 const app getCurrentInstance().appContext.app app.config.globalProperties.$EventBus.on(event, (data) {console.log(data) })// 销毁 const app getCurrentInstance().appContext.app app.config.globalProperties.$EventBus.off(event)------------------- import { inject } from vue;export default {// ...created() {const eventBus inject(eventBus);// 使用 eventBus 进行事件的发布和订阅},// ... } 总的来说Vue3与Vue2在EventBus方式上的区别不大只是在创建全局EventBus的方式上有所不同但是使用起来差异较大需要根据实际情况进行选择。 封装EventBus.js 类方式  class Event {constructor() {this.queue {};this.onceQueue {};}$on(name, callback) {this.queue[name] this.queue[name] || [];this.queue[name].push(callback);}$once(name, callback) {this.onceQueue[name] this.onceQueue[name] || [];this.onceQueue[name].push(callback);}$off(name, callback) {if (callback) {if (this.queue[name]) {for (var i 0; i this.queue[name].length; i) {if (this.queue[name][i] callback) {this.queue[name].splice(i, 1);break;}}}} else {delete this.queue[name];}}$emit(name, data) {if (this.queue[name]) {this.queue[name].forEach(function (callback) {callback(data);});}if (this.onceQueue[name]) {this.onceQueue[name].forEach(function (callback) {callback(data);});delete this.onceQueue[name];}} }export default new Event(); 使用  import Bus from /utils/EventBus; Bus.$on(test, (data) {}) Bus.$emit(close) beforeUnmount() {     Bus.$off(test, fun) } 构造函数方式 function E() { }// 函数E的原型对象 E.prototype {// on方法接受订阅名订阅函数上下文对象on: function (name, callback, context) {// 初始化e仓库var e this.e || (this.e {})// 收集订阅函数// 包装为对象收集订阅函数与上下文对象; (e[name] || (e[name] [])).push({fn: callback,context})// 返回实例对象return this},// once函数接收订阅名订阅函数上下文对象// 与on的区别是once函数收集只执行一遍的订阅函数once: function (name, callback, context) {let self this// 包装对象用于自定义执行逻辑删除操作function listener() {self.off(name, listener)callback.apply(context, arguments)}// 保存原始函数listener._ callback// 使用on收集自定义后的函数// 执行on方法会返回this所以once函数内不需要返回thisreturn this.on(name, listener, context)},// emit方法用于触发订阅函数接收订阅名称emit: function (name) {// 收集参数let args [].slice.call(arguments, 1)// 收集订阅函数数组let events ((this.e || (this.e {}))[name] || []).slice()let i 0let len events.length// 循环执行订阅函数for (; i len; i) {// 使用apply调用函数并绑定thisevents[i].fn.apply(events[i].context, args)}// 返回this实例return this},// off用于删除订阅函数接收订阅名和订阅函数off: function (name, callback) {let e this.e || (this.e {})// 获取订阅名称对应的数组let events e[name]let liveEvents []// 处理函数数组传入的订阅函数是否都存在if (events callback) {// 循环遍历过滤操作for (let i 0, len events.length; i len; i) {// 判断数组中的订阅函数是否与传入的订阅函数相等// 使用once创建的函数取_属性中的原始函数进行对比if (events[i].fn ! callback events[i].fn._ ! callback) {liveEvents.push(events[i])}}}// 重置订阅名结果数组(liveEvents.length) ? e[name] liveEvents : delete e[name]// 返回实例thisreturn this} }export default {$on: (...args) E.prototype.on(...args),$once: (...args) E.prototype.once(...args),$off: (...args) E.prototype.off(...args),$emit: (...args) E.prototype.emit(...args) } 使用  import Bus from /utils/EventBus2; Bus.$on(test, (data) {}) Bus.$emit(close) beforeUnmount() {     Bus.$off(test, fun) }
http://www.zqtcl.cn/news/57116/

相关文章:

  • 国内优秀个人网站我想创建一个网站自己玩玩
  • 建设网站一般流程学网站开发的培训学校
  • 自贡建设监督质量网站桂林app开发公司
  • 校园网站建设资金来源有各类专业网站建设
  • 找学校的网站杭州 网站外包
  • 漯河企业网站建设wordpress上传数据
  • 怎么建立一个简易的网站wordpress怎么自动生成内链
  • 如何建设个人网站怎样做公司网站建设
  • 平面设计教程网站有哪些徐州企业制作网站
  • 建设网站是普通办公吗上海网站建设推荐
  • 公司做的网站怎么维护腾讯企业邮箱网页版登录入口官网
  • 衡水精品网站建设价格网站搬家 备案
  • 最新网站开发软件做外汇可以参考的网站
  • 关键词整站优化公司外国服务器的网站
  • 怎么样做淘宝优惠券网站三种制作方式的比较
  • 加强红色网站建设有保障的无锡网站制作
  • 珠海摥园网站建设食品包装设计说明范文
  • Wordpress网站能做seo吗网站屏蔽省份
  • 做文具的网站帮别人做网站规划
  • 品牌网站建设多少钱珠海网站外包
  • 在哪个网站上面可以接项目做桂林生活网站
  • 天润网站建设晋源网站建设
  • 泰安定制网站建设公司推广圈
  • 网站网站做代理怎么发展下线网站代码seo优化
  • 网站注册域名备案应用市场app下载安装
  • 国外域名注册网站 中文做特卖的网站上品折扣
  • 省建设厅网站二建考试果洛州公司网站建设
  • 响应式网站 教程海西州建设局网站
  • 长沙的互联网网站公司百度为什么打不开网页无法访问
  • 百度公司网站制作网站设计目的与规划怎么写