位置: 编程技术 - 正文

vue中eventbus被多次触发以及踩过的坑(vue中的event)

编辑:rootadmin

推荐整理分享vue中eventbus被多次触发以及踩过的坑(vue中的event),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue中$event,vue中的eventbus,vue eventhub,vue eventloop,vue的event,vue中的eventbus,vue eventbus,vue eventbus,内容如对您有帮助,希望把文章链接给更多的朋友!

一开始的需求是这样子的,我为了实现两个页面组件之间的数据传递,假设我有页面A,点击页面A上的某一个按钮之后,页面会自动跳转到页面B,同时我希望将页面A上的某一些参数携带过去给页面B。(我知道,小参数的时候可以通过路由的params或者query去传参数,或者大型数据可以用vuex来处理,很遗憾我到现在还没有做很大型的项目,所以还没有用过vuex,接下来会学习一下。)

然后我就想,这不就是不同组件之间的数据传递问题而已吗?直接用bus 巴士事件来传递数据不就行了吗。于是,我就很愉快地进行了。关于vue中的eventbus的使用,我之前在一篇vue中的数据传递中有提到过。

先给你们看一下我一开始的代码:

实现目标:

点击之后,bus emit事件,然后顺便跳转路由到/moneyRecord页面。

接下来就是在MoneyRecord页面中去on接收这个事件,然后接受参数。

就当我欣喜若狂的时候,觉得自己只要在页面A触发了get事件,页面B中就会理所当然的接受了数据。然而,结果却不如人意,看一下下面的动图。

主要是看“”这是从上个页面传来的数据这一行数据的输出次数情况来判断事件触发次数。“”

不知道你有没有发现,就是我第一次进去list页面的时候,我随便点击一下list下的任何一个item,控制台没有输出。但是当我第二次再点击触发事件的时候,就会输出一个测试数据。再一次进去点击,就输出两个数据。。。依次增加了。(控制台上那个“这是从上个页面传来的数据”就是测试数据)

所以,有两个问题。

问题:

问题1: 为什么第一次触发的时候页面B中的on事件没有被触发 问题2: 为什么后面再一次依次去触发的时候会出现,每一次都会发现好像之前的on事件分发都没有被撤销一样,导致每一次的事件触发执行越来越多。

解决

针对问题1

这个还得从vue的生命周期说起了,我先进行了测试,就是当从页面组件A跳转到页面组件B的时候,两个组件的生命周期分别是怎么样的,关于vue的生命周期具体每一个时期做什么事情我就不再赘述了,下面po一张vue生命周期的图。

我自己做了实验来验证,这个页面跳转过程中,这两个组件的生命周期的执行情况。

vue中eventbus被多次触发以及踩过的坑(vue中的event)

测试结果图:

其实,可以通过结果清楚看到,当我们还在页面A的时候,页面B还没生成,也就是页面B中的 created中所监听的来自于A中的事件还没有被触发。这个时候当你A中emit事件的时候,B其实是没有监听到的。

再看一下,红色的是B页面组件,当你从页面A到页面B跳转的时候,发生了什么?首先是先B组件先created然后beforeMount接着A组件才被销毁,A组件才执行beforeDestory,以及destoryed.

所以,我们可以把A页面组件中的emit事件写在beforeDestory中去。因为这个时候,B页面组件已经被created了,也就是我们写的$on事件已经触发了

所以可以,在beforeDestory的时候,$emit事件。

接下来。看一下修改之后的效果

可以看到,就是第一次点击list的时候,也就是第一次触发emit事件的时候,控制太就输出了,所以在beforeDestoryed去$emit是起到作用的,B页面组件也监听$on到了。

但是,好像,就是事件的触发还是会依次增加,就是控制台的输出每次都有所增加了。。。

解决:

看一下github上提出的。 bus 是什么意思,有大神能解答一下的吗,尤大大也提到如果是注册的是external bus 的时候需要清除)****

所以。我在B组件页面中添加Bus.$off来关闭。代码如下:

来看一下输出的结果

t可以看到,控制台第一次进去的时候就有输出,而且输出的不会逐次增加

*当然,尤大大还说可以写一个mixin?我还不知道是什么?以后在研究一下。

总结: 所以,如果想要用bus 来进行页面组件之间的数据传递,需要注意亮点,组件A$emit事件应在beforeDestory生命周期内。其次,组件B内的$on记得要销毁。

提问时间:你们在实现页面组件之间的数据传递有什么好的方法吗?可以留言分享一下吗?有时候虽然也可以通过从后台获取,但是考虑到数据只有几个需要传的话,就没有必要去请求数据,我知道有的还有用vueX传递。还有呢?

标签: vue中的event

本文链接地址:https://www.jiuchutong.com/biancheng/380264.html 转载请保留说明!

上一篇:Angular之toDoList的实现代码示例(angular const)

下一篇:Vue导出json数据到Excel电子表格的示例(vue实现数据导出为excel)

  • SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用(sqlserver2008r2数据库导出教程)

    上图中将“恢复模式”选成“完整模式”。

    2、备份数据库,如下图:

    备份时将“备份类型”选成“完整”。

    3、备份事务日志,如下图:

    将“备份类型”选成“事务日志”且备份目录与备份数据库的目录一致。

    将备份文件在备机上使用主机的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:

    如果执行成功数据库将会变成这个样子:

    3、 建立镜像

    说明:shishan为数据库名,需要根据实际进行修改。..1.为备机IP地址,需根据实际进行修改。

    执行成功后:

    到此,SQL镜像热备配置完成。

    四、常见命令

    备份主数据库出现:Backup a database on a HDD with a different sector size,可以执行以下语句备份:BACKUP DATABASE MyDB TO DISK = N'D:MyDB.bak' WITH INIT , NOUNLOAD , NAME = N'MyDB backup" class="img-responsive" alt="SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用(sqlserver2008r2数据库导出教程)">

    SQL Server2008 R2 数据库镜像实施手册(双机)SQL Server2014同样适用(sqlserver2008r2数据库导出教程)

  • Bios密码忘记了怎么办 主板CMOS设置的Bios密码清除方法(bios密码忘记了要怎么重置)

    Bios密码忘记了怎么办 主板CMOS设置的Bios密码清除方法(bios密码忘记了要怎么重置)

  • 删除Win7系统中多余的输入法的教程(怎么删除win7系统)

    删除Win7系统中多余的输入法的教程(怎么删除win7系统)

  • Windows系统下打开文件夹没响应解决方法(win10打)

    Windows系统下打开文件夹没响应解决方法(win10打)

  • 让MAC系统CrossOver支持中文软件运行的方法(macos教程)

    让MAC系统CrossOver支持中文软件运行的方法(macos教程)

  • javascript基础语法——全面理解变量和标识符(javaScript基础语法数据类型)

    javascript基础语法——全面理解变量和标识符(javaScript基础语法数据类型)

  • JS实现的仿淘宝交易倒计时效果(html仿淘宝)

    JS实现的仿淘宝交易倒计时效果(html仿淘宝)

  • python中的lambda表达式用法详解(python中lambda怎么用)

    python中的lambda表达式用法详解(python中lambda怎么用)

  • 什么是企业的应纳税额
  • 税控系统怎么登录
  • 保险佣金个人所得税怎么算
  • 关税完税价格计算消费税公式
  • 金税四期什么时候执行
  • 销售原材料需要交消费税吗
  • 保险没有合同能退保吗
  • 信用证保证金是什么意思
  • 企业怎么办税
  • 学校有没有纳税人识别号
  • 金税盘忘记清卡了
  • 印花税滞纳金计入什么科目
  • 2月发1月工资个税怎么算
  • 2018年工资薪金个税起征点
  • 本期金额怎么计算
  • 没有预付账款科目计入哪里
  • 土地租赁协议和合同有什么区别
  • 给股东分配股利
  • 怎么解决百度打不开页面
  • 房东不开发票违法吗
  • 预缴增值税会计处理
  • 新买的苹果电脑需要注意什么
  • 苹果手机抖音投屏到电视怎么投屏
  • Window7+CentOS 6.5双系统安装图文方法
  • PHP:mb_detect_encoding()的用法_mbstring函数
  • 公司私户利息收入怎么算
  • 结转消费税的会计分录
  • linux命令行使用鼠标
  • PHP:oci_fetch_assoc()的用法_Oracle函数
  • 会计虚假做账
  • 分析卡拉哈迪沙漠的形成原因
  • php7数据库操作
  • php的魔术函数
  • discuz论坛修改密码位置
  • 傅里叶变换的过程
  • 攻防世界web高手题答案
  • vue动态路由是什么
  • pytorch csdn
  • .size()
  • php设置header参数
  • 取得进项税发票什么时期内可以抵扣
  • 进项转出分录处理
  • 支付版权费用账号是什么
  • 交易性金融资产的账务处理
  • 增值税专用发票有几联?
  • 积分换购活动
  • 批量替换多个word文档的同一内容
  • 银行年费什么时候取消的
  • 支出金额是什么
  • 公司汽车转卖给个人税率
  • sql server 2005怎么用
  • 金税四期对纳税人的影响有哪些
  • 建筑业无票收入收货款分录
  • 短期借款利息的使用账户是
  • 低值易耗品摊销借贷方向
  • 装修属于营业费用还是管理费用
  • 母公司代发子公司工资,子公司申报个税
  • 小规模纳税人租赁发票税率是多少
  • 银行销户余额怎么查
  • 固定资产折旧方法的选择
  • 主营业务成本的贷方是什么
  • sql根据逗号分割数据
  • windows7中ie浏览器怎么打开
  • a4腰多大
  • 红石2代
  • js怎么删除
  • jquery拖拽功能
  • 超全面的竣工验收流程及资料
  • 用jquery制作网页
  • android图片库
  • pythonista pygame
  • node.js mysql
  • jquery图片上传
  • python中email模块
  • 江苏省电子税务局社保缴费查询
  • 江苏国税网上勾选平台
  • 江苏税务机关代码查询
  • 交警认可的客货两用车型
  • 造纸及纸制品业属于什么行业
  • 郑州房子契税退税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设