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


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 相关文章推荐
java与javascript之间json格式数据互转介绍
Oct 29 Javascript
confirm的用法示例用于按钮操作时确定是否执行
Jun 19 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
Node.js学习教程之Module模块
Sep 03 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
VueJS实现用户管理系统
May 29 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
Mar 31 jQuery
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 强制下载文件代码
2010/10/24 PHP
在PHP中使用redis
2013/11/04 PHP
PHP爬虫之百万级别知乎用户数据爬取与分析
2016/01/22 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
2019/05/23 PHP
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
jquery制作图片时钟特效
2020/03/30 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python 高级专用类方法的实例详解
2017/09/11 Python
Python快速排序算法实例分析
2017/11/29 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
Python实现按照指定要求逆序输出一个数字的方法
2018/04/19 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
采购主管工作职责
2013/12/12 职场文书
老师给学生的表扬信
2014/01/17 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
红领巾心向党演讲稿
2014/09/10 职场文书
房屋出租委托书格式
2014/09/23 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
2014年环保工作总结
2014/11/26 职场文书
同意离婚答辩状
2015/05/22 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
高三语文教学反思
2016/02/16 职场文书
微信小程序调用python模型
2022/04/21 Python