关于 Vue 中 我对中央事线管理器(enentBus)的误解

时光总嘲笑我的痴心妄想 提交于 2020-04-10 11:23:13

由于这段时间公司比较闲,就对vue 中的一些模糊的点做了一些加强,突然就想到了常挂在嘴边兄弟组件传值

我理解的兄弟组件的传值是可以路由由传值的,比如我从http://localhost:8080/login 里面的值可以传递到 http://localhost:8080/home 这个页面的

于是我是www.baidu.com 了一番,没错,跟我想象一样的,可以进行页面传值, 于是呼我就跟着百度一番操作

 

像这样:

 

 于是我建了一个 bus.js 

import Vue from 'vue'
export const EventBus = new Vue()

 

像这样:

于是我在我的 login.vue 里面绑定了一个 $emit

import { EventBus } from '../../bus'
    clickLgin() {
      console.log(EventBus)
      EventBus.$emit('add', '123456789')
    }

  

像这样:

 

 于是我在我的home.vue 添加 $on 

  

import { EventBus } from '../../bus'
  
created() { EventBus.$on('add', target => { console.log(target, '222') }) }

  

  到这儿该结束了,可以愉快的拿到 login.vue 页面传递过来的 222 了吧, 嘿,不行,空的,不打印

  后来几经周折,我发现,当我 第一次从login 页面进入 home 页面,$on 是没有触发的, 我从home 页面退到 login页面,再从 login 进入home 页面,也就是 第二次进入home 时,能传递值了,这就是神奇的地方

  我不知道这些博主在写 东西时有没有自己实践,如果你们实践了能传递,那是我菜不会用,如果没有,我只想说害人

总结:

  eventBus 是给兄弟组件传值的,不是给模块传值的,当从A页面进入另B页面时, B页面时没有实例化的,也就是说 $on 监听是不存在的,兄弟组件也是不存在的, 当B页面实例化之后,$on 他才开始监听,可是这时候并没有监听到自定义事件,所有是空值, 当我们再次退回A页面时,由于浏览器缓存机制,B页面的代码得以缓存,监听依旧存在,我们在A 页面自定义事件后,回到B 页面,也就监听到了 A页面的自定事件,所以得到值

 

ps: 如果对我此次总结的问题有所异议,请您先实践,如果是可以传值的,请联系我,将代码发给我,我验证没问题会删除博客,如果有需要还会为我的无知道歉

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!