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


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替代copy(示例代码)
Nov 27 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
May 23 Javascript
jquery使用$(element).is()来判断获取的tagName
Aug 24 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
Sep 25 Javascript
深入浅析JavaScript中的scrollTop
Jul 11 Javascript
微信小程序教程之本地图片上传(leancloud)实例详解
Nov 16 Javascript
bootstrap模态框跳转到当前模板页面 框消失了而背景存在问题的解决方法
Nov 30 Javascript
Bootstrap php制作动态分页标签
Dec 23 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
Jun 01 Javascript
快速将Vue项目升级到webpack3的方法步骤
Sep 14 Javascript
微信小程序数据分析之自定义分析的实现
Aug 17 Javascript
vue 解除鼠标的监听事件的方法
Nov 13 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
开源的javascript项目Kissy介绍
2014/11/28 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
jQuery实现淡入淡出的模态框
2017/02/09 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
详解基于Koa2开发微信二维码扫码支付相关流程
2018/05/16 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
详解如何理解vue的key属性
2019/04/14 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
2020/03/10 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
Python使用import导入本地脚本及导入模块的技巧总结
2019/08/07 Python
numpy的Fancy Indexing和array比较详解
2020/06/11 Python
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
校园新闻广播稿
2014/01/10 职场文书
给老师的一封建议书
2014/03/13 职场文书
2014年党支部承诺书
2014/05/30 职场文书
法人代表身份证明书及授权委托书
2014/09/16 职场文书
机关作风建设剖析材料
2014/10/11 职场文书
职工年度考核评语
2014/12/31 职场文书
刑事案件上诉状
2015/05/23 职场文书
演讲稿之开卷有益
2019/08/07 职场文书
golang日志包logger的用法详解
2021/05/05 Golang