怎么理解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 相关文章推荐
JavaScript 三种不同位置代码的写法
Oct 25 Javascript
jQuery中的val()示例应用
Feb 26 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
JavaScript原型及原型链终极详解
Jan 04 Javascript
关于原生js中bind函数的简单实现
Aug 10 Javascript
对于js垃圾回收机制的理解
Sep 14 Javascript
React-Native之定时器Timer的实现代码
Oct 04 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
微信小程序中换行空格(多个空格)写法详解
Jul 10 Javascript
setTimeout与setInterval的区别浅析
Mar 23 Javascript
npm 语义版本控制详解
Sep 10 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
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
PHP积分兑换接口实例
2015/02/09 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
2016/01/08 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
php图片合成方法(多张图片合成一张)
2017/11/25 PHP
一个加密JavaScript的开源工具PACKER2.0.2
2006/11/04 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
解决Vue keep-alive 调用 $destory() 页面不再被缓存的情况
2020/10/30 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
Django查询数据库的性能优化示例代码
2017/09/24 Python
对Python 获取类的成员变量及临时变量的方法详解
2019/01/22 Python
Windows10下Tensorflow2.0 安装及环境配置教程(图文)
2019/11/21 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
python使用scapy模块实现ARP扫描的过程
2021/01/21 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
护士自我评价
2014/02/01 职场文书
媒矿安全生产承诺书
2014/05/23 职场文书
学生会个人总结范文
2015/02/15 职场文书
提档介绍信范文
2015/10/22 职场文书
交通事故协议书范本
2016/03/19 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
MySQL infobright的安装步骤
2021/04/07 MySQL