怎么理解wx.navigateTo的events参数使用详情


Posted in Javascript onMay 18, 2020

遇到一个这样的业务需求, 用户点击提现按钮, 跳转到提现处理结果页面, 为了避免提现请求被重复提交, 所以需要在用户点击了提交按钮以后就把按钮锁起来不给用户提交, 在拿到请求结果以后再把按钮打开
先看界面

怎么理解wx.navigateTo的events参数使用详情

再看实现逻辑

onWithdraw () {
 console.log('加锁', this.data.isWithdrawing)
 if (this.data.isWithdrawing) return
 // isWithdrawing要在data中初始化为false
 this.data.isWithdrawing = true
 console.log('按照预期, 这里在跳转之前应该只执行一次', this.data.isWithdrawing)

 req.redpack.withdraw(this.data.withDrawAmount, this.data.currentCardId)
  .then(res => {
   // 请求参数不用看, 是封装的方法
   if (res.code === 201) {
    this.data.isWithdrawing = true
    wx.navigateTo({
     url: '/pages/redpack/withdrawResult/withdrawResult'
    })
   }  
  })
}

于是我输入金额, 疯狂的点击按钮, 看到的是这样的

怎么理解wx.navigateTo的events参数使用详情

怎么理解wx.navigateTo的events参数使用详情

难道应该把this.data.isWithdrawing = true放在 wx.navigateTo后?于是测试, 无果(有兴趣的同学可以试试)

于是, 我打开了微信官方文档

怎么理解wx.navigateTo的events参数使用详情

噢...我懂了, this.data.isWithdrawing = true应该放在complete回调里去支持, 于是我把代码改成这样:

怎么理解wx.navigateTo的events参数使用详情

测试

怎么理解wx.navigateTo的events参数使用详情

额......

由此我推断, complete回调是在页面跳转前执行的, 跳转前把锁解开, 然后我手速又比较快, 所以才出现了多次执行的情况, 那究竟要怎么处理呢?

再次翻阅文档, 一个event参数吸引了我, 但是官方写得有点模糊, 于是自己进行了代码的测试, 下面将我的理解分享给大家, 我喜欢用图形来表达, 请看图:

怎么理解wx.navigateTo的events参数使用详情

怎么理解wx.navigateTo的events参数使用详情

怎么理解wx.navigateTo的events参数使用详情

重点重点重点:

1) eventChannel是页面跳转时产生的一个独立于页面外的对象, 父页面和子页面都可以在eventChannel里面定义方法, 而eventChannel里面的方法在某种意义上是可以操作两个页面的数据的
2) 父页面通过events参数定义父方法一, 父方法二...
3) 子页面通过this.getOpenerEventChannel()拿到eventChannel对象, 并且通过eventChannel.on来定义子方法一, 子方法二...
4) 父页面通过success或者complete里面的res拿到eventChannel对象, 并通过res.eventChannel.emit来触发子页面通过eventChannel.on定义的方法
5) 子页面通过this.getOpenerEventChannel()拿到eventChannel对象执行emit来触发父页面定义的方法
6) 最后, 我所说的父方法, 子方法, 其实都是定义在eventChannel上的, 这样说只是方便大家理解, 父页面应该也也是可以通过emit去触发自己在events里面定义的方法的, 但是这样没有意义, 所以, 我就不做测试了,因为没有人会傻到自己跟自己通信吧, 哈哈哈...

再回到我们一开始的业务需求:
我们是不是可以这样操作, 在子页面显示的以后再去把父页面的锁打开呢?这样不就避免了重复提交的问题了吗?(当然有人会问我, 你为什么搞得这么复杂?直接锁死不就好了吗?但是你是够考虑到这样一种情况, 用户在提现以后, 又点击了后退页面, 再次进行提现, 这样你的锁还开着, 第二不就不能提现了吗?)
好了, 下面我们来实现代码
父页面:

怎么理解wx.navigateTo的events参数使用详情

子页面:

怎么理解wx.navigateTo的events参数使用详情

结果:

怎么理解wx.navigateTo的events参数使用详情

点返回, 再次提现

怎么理解wx.navigateTo的events参数使用详情

妥妥的....

到此这篇关于怎么理解wx.navigateTo的events参数使用详情的文章就介绍到这了,更多相关wx.navigateTo的events参数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
jQuery图片的展开和收缩实现代码
Apr 16 Javascript
jquery实现文字由下到上循环滚动的实例代码
Aug 09 Javascript
Textarea根据内容自适应高度
Oct 28 Javascript
新增加的内容是如何将div的scrollbar自动移动最下面
Jan 02 Javascript
5个JavaScript经典面试题
Oct 13 Javascript
jQuery验证插件validate使用方法详解
Sep 13 Javascript
arcgis for js 修改infowindow样式的方法
Nov 02 Javascript
值得分享的Bootstrap Table使用教程
Nov 23 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
微信小程序非跳转式组件授权登录的方法示例
May 22 Javascript
js 执行上下文和作用域的相关总结
Feb 08 Javascript
HTML+JS实现在线朗读器
Feb 15 Javascript
django简单的前后端分离的数据传输实例 axios
May 18 #Javascript
vue+koa2搭建mock数据环境的详细教程
May 18 #Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
May 18 #Javascript
react 生命周期实例分析
May 18 #Javascript
react使用CSS实现react动画功能示例
May 18 #Javascript
Node.js API详解之 net模块实例分析
May 18 #Javascript
Javascript实现简易天数计算器
May 18 #Javascript
You might like
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
使用JavaScript为一张图片设置备选路径的方法
2017/01/04 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
javascript实现table单元格点击展开隐藏效果(实例代码)
2017/04/10 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
js实现登录与注册界面
2017/11/01 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
vue计算属性和监听器实例解析
2018/05/10 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
2018/08/13 Javascript
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
[36:14]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第二局
2016/02/28 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
Python读取mat文件,并保存为pickle格式的方法
2018/10/23 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python实现单张图像拼接与批量图片拼接
2020/03/23 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
2020/10/23 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
学习十八大报告感言
2014/02/28 职场文书
cf收人广告词大全
2014/03/14 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
2016年离婚协议书范文
2016/03/18 职场文书