怎么理解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 相关文章推荐
JS 非图片动态loading效果实现代码
Apr 09 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
May 07 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
Aug 19 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
浅谈Javascript中匀速运动的停止条件
Dec 19 Javascript
浅谈Jquery为元素绑定事件
Apr 27 Javascript
AngularJs Scope详解及示例代码
Sep 01 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
Jan 16 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 Javascript
详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题
Nov 06 Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 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上传文件,创建递归目录的实例代码
2013/10/18 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php使用Cookie控制访问授权的方法
2015/01/21 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
jquery 之 $().hover(func1, funct2)使用方法
2012/06/14 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
举例讲解jQuery中可见性过滤选择器的使用
2016/04/18 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
利用transition实现文字上下抖动的效果
2017/01/21 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
vue.js的提示组件
2017/03/02 Javascript
Vue表单验证插件Vue Validator使用方法详解
2017/04/07 Javascript
为你的微信小程序体积瘦身详解
2017/05/20 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vue用Object.defineProperty手写一个简单的双向绑定的示例
2018/07/09 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
js数组中去除重复值的几种方法
2020/08/03 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
详解Django通用视图中的函数包装
2015/07/21 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
Python DataFrame 设置输出不显示index(索引)值的方法
2018/06/07 Python
Python中format()格式输出全解
2019/04/12 Python
Python queue队列原理与应用案例分析
2019/09/27 Python
python numpy之np.random的随机数函数使用介绍
2019/10/06 Python
pytorch下大型数据集(大型图片)的导入方式
2020/01/08 Python
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
建龙钢铁面试总结
2014/04/15 面试题
2014年文员工作总结
2014/11/18 职场文书
“学党章、守党纪、讲党规”学习心得体会
2016/01/14 职场文书