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


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 解决表单仍然提交即使监听处理函数返回false
Mar 14 Javascript
jquery select(列表)的操作(取值/赋值)
Mar 16 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
Aug 30 Javascript
js给页面加style无效果的解决方法
Jan 20 Javascript
JavaScript操作URL的相关内容集锦
Oct 29 Javascript
使用RequireJS库加载JavaScript模块的实例教程
Jun 06 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
js 输入框 正则表达式(菜鸟必看教程)
Feb 19 Javascript
vue中使用localstorage来存储页面信息
Nov 04 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
Jan 07 Javascript
vue实现文件上传读取及下载功能
Nov 17 Javascript
微信小程序自定义联系人弹窗
May 26 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
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP生成各种随机验证码的方法总结【附demo源码】
2017/06/05 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
tp5修改(实现即点即改)
2019/10/18 PHP
PHP mkdir创建文件夹实现方法解析
2020/11/13 PHP
Maps Javascript
2007/01/22 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
JavaScript之AOP编程实例
2015/07/17 Javascript
JavaScript中的继承之类继承
2016/05/01 Javascript
使用JavaScript获取URL中的参数(两种方法)
2016/11/16 Javascript
js实现文字向上轮播功能
2017/01/13 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
vue页面离开后执行函数的实例
2018/03/13 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
JavaScript位置参数实现原理及过程解析
2020/09/14 Javascript
JS pushlet XMLAdapter适配器用法案例解析
2020/10/16 Javascript
vue使用过滤器格式化日期
2021/01/20 Vue.js
[13:38]2015国际邀请赛中国战队出征仪式
2015/05/29 DOTA
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
set在python里的含义和用法
2019/06/24 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
工程师岗位职责
2013/11/08 职场文书
团队激励口号
2014/06/06 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
会计简历自我评价
2015/03/10 职场文书
OpenCV-Python实现人脸美白算法的实例
2021/06/11 Python
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL
P站美图推荐——变身女主角特辑
2022/03/20 日漫