怎么理解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 相关文章推荐
重写document.write实现无阻塞加载js广告(补充)
Dec 12 Javascript
jQuery插件编写步骤详解
Jun 03 Javascript
JavaScript面试开发常用的知识点总结
Aug 08 Javascript
javaScript语法总结
Nov 25 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
node.js将MongoDB数据同步到MySQL的步骤
Dec 10 Javascript
JavaScript实用代码小技巧
Aug 23 Javascript
详解JQuery基础动画操作
Apr 12 jQuery
vue项目部署到nginx/tomcat服务器的实现
Aug 26 Javascript
javascript实现动态时钟的启动和停止
Jul 29 Javascript
Vue 封装防刷新考试倒计时组件的实现
Jun 05 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
Jul 17 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/06/24 PHP
PHP使用HTML5 FormData对象提交表单操作示例
2019/07/02 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
innerText 使用示例
2014/01/23 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
BootStrap table使用方法分析
2016/11/08 Javascript
Nodejs实现短信验证码功能
2017/02/09 NodeJs
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
Python最基本的输入输出详解
2015/04/25 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
Django框架 信号调度原理解析
2019/09/04 Python
wxPython之wx.DC绘制形状
2019/11/19 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
Python 解析简单的XML数据
2020/07/24 Python
Python连接Mysql进行增删改查的示例代码
2020/08/03 Python
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
英国男女豪华配饰和礼品网站:Black.co.uk
2020/02/28 全球购物
精伦电子Java笔试题
2013/01/16 面试题
广州喜创信息技术有限公司JAVA软件工程师笔试题
2012/10/17 面试题
计算机专业毕业生推荐信
2013/11/25 职场文书
安全教育实施方案
2014/03/02 职场文书
寄语学生的话
2014/04/10 职场文书
2015年财政所工作总结
2015/04/25 职场文书
七一慰问简报
2015/07/20 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
2021/10/16 MySQL