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


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 相关文章推荐
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
js定时器(执行一次、重复执行)
Mar 07 Javascript
JS实现进入页面时渐变背景色的方法
Feb 25 Javascript
js绘制圆形和矩形的方法
Aug 05 Javascript
JavaScript组件开发完整示例
Dec 15 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
Vuejs中使用markdown服务器端渲染的示例
Nov 22 Javascript
vue中前进刷新、后退缓存用户浏览数据和浏览位置的实例讲解
Sep 21 Javascript
如何使用pm2快速将项目部署到远程服务器
Mar 12 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
Apr 03 Javascript
vue-cli在 history模式下的配置详解
Nov 26 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
Sep 14 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP常用代码
2006/11/23 PHP
小偷PHP+Html+缓存
2006/12/20 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
js统计录入文本框中字符的个数并加以限制不超过多少
2014/05/23 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
利用vueJs实现图片轮播实例代码
2017/06/03 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
vue使用better-scroll实现下拉刷新、上拉加载
2018/11/23 Javascript
BootStrap table实现表格行拖拽效果
2018/12/01 Javascript
微信小程序拍照和摄像功能实现方法示例
2019/02/01 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
使用go和python递归删除.ds store文件的方法
2014/01/22 Python
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
tensorflow estimator 使用hook实现finetune方式
2020/01/21 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
Python求凸包及多边形面积教程
2020/04/12 Python
pycharm不以pytest方式运行,想要切换回普通模式运行的操作
2020/09/01 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
法学专业毕业生自荐信范文
2013/12/18 职场文书
远程教育心得体会
2014/01/03 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
领导干部群众路线剖析材料
2014/10/09 职场文书
社区党支部承诺书
2015/04/29 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书