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


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文件中调用js的实现方法小结
Oct 23 Javascript
再论Javascript下字符串连接的性能
Mar 05 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
Oct 23 Javascript
jQuery打印指定区域Html页面并自动分页
Jul 04 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
JavaScript设计模式之单体模式全面解析
Sep 09 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
Dec 07 Javascript
npm国内镜像 安装失败的几种解决方案
Jun 04 Javascript
基于JavaScript实现百度搜索框效果
Jun 28 Javascript
angular4+百分比进度显示插件用法示例
May 05 Javascript
原生JS封装vue Tab切换效果
Apr 28 Vue.js
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/16 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
2016/06/19 PHP
php事件驱动化设计详解
2016/11/10 PHP
javascript获取隐藏dom的宽高 具体实现
2013/07/14 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
2016/06/02 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
laravel-admin 与 vue 结合使用实例代码详解
2019/06/04 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
2019/12/16 Javascript
[46:37]LGD vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python解决字典中的值是列表问题的方法
2013/03/04 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python 内置模块详解
2019/01/01 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
python双向链表原理与实现方法详解
2019/12/03 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python中有函数重载吗
2020/05/28 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
瑞典快乐袜子:Happy Socks
2018/02/16 全球购物
医学生实习自我鉴定
2013/09/27 职场文书
气象学专业个人求职信
2014/03/15 职场文书
我的理想演讲稿
2014/04/30 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
CSS3 制作的彩虹按钮样式
2021/04/11 HTML / CSS
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL
centos7安装mysql5.7经验记录
2022/05/02 Servers
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android
oracle设置密码复杂度及设置超时退出的功能
2022/06/28 Oracle