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


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 相关文章推荐
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
Jan 02 Javascript
浅谈Javascript如何实现匀速运动
Dec 19 Javascript
DOM基础教程之使用DOM控制表格
Jan 20 Javascript
Easyui 之 Treegrid 笔记
Apr 29 Javascript
jQuery简单自定义图片轮播插件及用法示例
Nov 21 Javascript
Bootstrap3 内联单选和多选框
Dec 29 Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 Javascript
js 颜色选择插件
Jan 23 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
JavaScript对象_动力节点Java学院整理
Jun 23 Javascript
js中比较两个对象是否相同的方法示例
Sep 02 Javascript
在Vue.js中使用TypeScript的方法
Mar 19 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 FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php如何解决无法上传大于8M的文件问题
2014/03/10 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
基于Laravel-admin 后台的自定义页面用法详解
2019/09/30 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
在js里怎么实现Xcode里的callFuncN方法(详解)
2016/11/05 Javascript
jQuery中get方法用法分析
2016/12/07 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
python自定义类并使用的方法
2015/05/07 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
Pandas实现数据类型转换的一些小技巧汇总
2018/05/07 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
基于python实现蓝牙通信代码实例
2019/11/19 Python
python装饰器代替set get方法实例
2019/12/19 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
致长跑运动员广播稿
2014/01/31 职场文书
公务员政审个人鉴定
2014/02/25 职场文书
生产操作工岗位职责
2014/09/16 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
先进人物事迹材料
2014/12/29 职场文书
三好学生评语大全
2014/12/29 职场文书
技术支持岗位职责
2015/02/13 职场文书
Python基础详解之邮件处理
2021/04/28 Python