详解小程序如何动态绑定点击的执行方法


Posted in Javascript onNovember 26, 2019

需求

一个商城的个人中心页里,有很多用户操作按钮:我的订单,我的提现,我的送货等等,每个图标在点击的时候,可能是跳转页面的,也可能是执行当页方法的。

目前需要写一个通用的方法来实现这个功能,菜单的数据结构是一样的。

详解小程序如何动态绑定点击的执行方法

解决

菜单数据结构

title: 菜单名
iconUrl: 图标url
type: page - 跳转页面 或者 method - 执行方法
url: 点击时跳转的链接或执行方法
badge: 图标上显示的未读信息数

// 营销工具菜单组
menuListSell: [
 {id: 0, title: '开团海报', type: 'page', url: '/pages/userCenter/poster/poster' ,iconUrl: '/assets/mine/poster.png', badge: 0},
 {id: 1, title: '优惠券包', type: 'method', url: 'showDeveloping' ,iconUrl: '/assets/mine/coupon.png', badge: 4},
 {id: 2, title: '优惠活动', type: 'method', url: 'showDiscountActivity' ,iconUrl: '/assets/mine/gift.png', badge: 0},
],

页面结构是这样的

<view class="section-icons">
  <view wx:for="{{menuListNormal}}"
     wx:key="{{item.id}}"
     data-index="{{item.id}}"
     data-type="{{item.type}}"
     data-url="{{item.url}}"
     class="section-icons-item"
     bindtap="switchMenu" >
    <view class="icon">
      <image src="{{item.iconUrl}}" mode="aspectFit"></image>
      <view wx:if="{{item.badge > 0}}" class="badge">{{item.badge}}</view>
    </view>
    <text>{{item.title}}</text>
  </view>
</view>

每个图标菜单在点击的时候,都会执行 switchMenu 这个方法,获取标签上的 urltype, 再通过 type 值判断跳转页面还是执行方法,如果 type === 'page' 就跳转链接为 url 的页面,如果 type !== 'page' 就执行当页名为 url 的方法。当然,这个方法需要事先在当前页面中已经写好。

重要 主要是如何执行名为 url 的方法:因为要执行的 url 方法是 this 的一个对象,所以可以直接使用 this['对象字符串']() 来执行这个方法, this['对象字符串'] 定位到了这个方法的引用,再加上 () 就可以执行这个方法,如下:

// 菜单点击
 switchMenu(e){
  // 获取标签上的数据
  let pageUrl = e.currentTarget.dataset.url;
  let type = e.currentTarget.dataset.type;
  if (type === 'page'){ // 跳转页面时
   wx.navigateTo({
    url: pageUrl
   })
  } else { // 调用方法时
   this[pageUrl]()
  }
 },

结果

这位,就可以实现页面跳转和方法执行了

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS之小练习代码
Oct 12 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
Jan 08 Javascript
不要在cookie中使用特殊字符的原因分析
Jul 13 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
JavaScript使用concat连接数组的方法
Apr 06 Javascript
原生js实现移动开发轮播图、相册滑动特效
Apr 17 Javascript
window.onload与$(document).ready()的区别分析
May 30 Javascript
详解Angular的双向数据绑定(MV-VM)
Dec 26 Javascript
移动端点击态处理的三种实现方式
Jan 12 Javascript
Jquery实现跨域异步上传文件总结
Feb 03 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
Dec 29 Javascript
vue element-ui读取pdf文件的方法
Nov 26 #Javascript
Vue+Element-UI实现上传图片并压缩
Nov 26 #Javascript
jQuery实现轮播图效果
Nov 26 #jQuery
JavaScript使用百度ECharts插件绘制饼图操作示例
Nov 26 #Javascript
使用vue重构资讯页面的实例代码解析
Nov 26 #Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 #Javascript
JavaScript的变量声明与声明提前用法实例分析
Nov 26 #Javascript
You might like
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
JavaScript 拖拉缩放效果
2008/12/10 Javascript
JS模拟自动点击的简单实例
2013/08/08 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
BootStrap selectpicker
2016/06/20 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
详解JS构造函数中this和return
2017/09/16 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
如何利用Node.js与JSON搭建简单的动态服务器
2020/06/16 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
一些Python中的二维数组的操作方法
2015/05/02 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
解析Python编程中的包结构
2015/10/25 Python
Python卸载模块的方法汇总
2016/06/07 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
财务工作个人求职的自我评价
2013/12/19 职场文书
学习十八大报告感言
2014/02/04 职场文书
元旦晚会策划方案
2014/02/18 职场文书
《美丽的小兴安岭》教学反思
2014/02/26 职场文书
舞蹈专业求职信
2014/06/13 职场文书
四风对照检查剖析材料
2014/10/07 职场文书
公务员年度考核评语
2014/12/31 职场文书
美术教师个人总结
2015/02/06 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书