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


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 相关文章推荐
javascript生成json数据简单示例分享
Feb 14 Javascript
jQuery中多个元素的Hover事件解决方案
Jun 12 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
Oct 18 Javascript
Ztree新增角色和编辑角色回显问题的解决
Oct 25 Javascript
Vue.js实现移动端短信验证码功能
Mar 29 Javascript
vue-router路由懒加载和权限控制详解
Dec 13 Javascript
Vue2 监听属性改变watch的实例代码
Aug 27 Javascript
webpack4实现不同的导出类型
Apr 09 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
Apr 19 Javascript
java实现单链表增删改查的实例代码详解
Aug 30 Javascript
react中Suspense的使用详解
Sep 01 Javascript
jquery插件实现代码雨特效
Apr 24 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 MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
php三种实现多线程类似的方法
2015/10/30 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
2017/02/23 PHP
php-app开发接口加密详解
2018/04/18 PHP
jquery maxlength使用说明
2011/09/09 Javascript
关于innerHTML后丢失动态绑定的EVENT问题解决方法
2013/05/19 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
JavaScript中关键字 in 的使用方法详解
2016/10/17 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
jquery animate动画持续运动的实例
2017/11/29 jQuery
详解Immutable及 React 中实践
2018/03/01 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
对python中执行DOS命令的3种方法总结
2018/05/12 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
基于python plotly交互式图表大全
2019/12/07 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
详解python datetime模块
2020/08/17 Python
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
简单说说tomcat的配置
2013/05/28 面试题
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
后勤人员自我鉴定
2013/10/20 职场文书
出纳岗位职责模板
2013/11/27 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
交通事故协议书范文
2014/10/23 职场文书
2015年党风建设工作总结
2015/04/29 职场文书
运动员加油词
2015/07/18 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
Python入门之基础语法详解
2021/05/11 Python