怎么理解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 18 Javascript
深入理解jQuery中live与bind方法的区别
Dec 18 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
May 05 Javascript
BootStrap使用file-input插件上传图片的方法
Sep 05 Javascript
jQuery删除节点用法示例(remove方法)
Sep 08 Javascript
jquery实现手机端单店铺购物车结算删除功能
Feb 22 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
js和jquery中获取非行间样式
May 05 jQuery
jQuery层级选择器_动力节点节点Java学院整理
Jul 04 jQuery
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
javascript刷新父页面方法汇总详解
Oct 10 Javascript
vue route新窗口跳转页面并且携带与接收参数
Apr 10 Vue.js
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
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
2006/10/09 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
IIS6.0 开启Gzip方法及PHP Gzip函数分享
2014/06/08 PHP
PHP自定义函数获取汉字首字母的方法
2016/12/01 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
JavaScript 创建对象和构造类实现代码
2009/07/30 Javascript
jquery 查找新建元素代码
2010/07/06 Javascript
JS无法捕获滚动条上的mouse up事件的原因猜想
2012/03/21 Javascript
js判断选择时间不能小于当前时间的示例代码
2013/09/24 Javascript
js将字符串转成正则表达式的实现方法
2013/11/13 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
JS函数的定义与调用方法推荐
2016/05/12 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
使用JSON作为函数的参数的优缺点
2016/10/27 Javascript
微信开发 使用picker封装省市区三级联动模板
2016/10/28 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
Vue三种常用传值示例(父传子、子传父、非父子)
2018/07/24 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Python分类测试代码实例汇总
2020/07/23 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
程序员跳槽必看面试题总结
2013/06/28 面试题
英文简历中的自我评价
2013/10/06 职场文书
党员违纪检讨书
2014/02/18 职场文书
毕业生求职信范文
2014/06/29 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
2016继续教育研修日志
2015/11/13 职场文书
Java并发编程之Executor接口的使用
2021/06/21 Java/Android