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


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 AutoScroller 函数类
May 29 Javascript
当鼠标移动到图片上时跟随鼠标显示放大的图片效果
Jun 06 Javascript
js原生appendChild的bug解决心得分享
Jul 01 Javascript
vue2 自定义动态组件所遇到的问题
Jun 08 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
Dec 12 Javascript
vue-infinite-loading2.0 中文文档详解
Apr 08 Javascript
js回调函数仿360开机
Dec 26 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
vue 使用localstorage实现面包屑的操作
Nov 16 Javascript
swiperjs实现导航与tab页的联动
Dec 13 Javascript
Vue仿百度搜索功能
Dec 28 Vue.js
一百多行代码实现react拖拽hooks
Mar 23 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断点续传之如何分割合并文件
2014/03/22 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
PHP程序员简单的开展服务治理架构操作详解(一)
2020/05/14 PHP
php使用event扩展的io复用测试的示例
2020/10/20 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
ES6入门教程之Iterator与for...of循环详解
2017/05/17 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
vue小白入门教程
2018/04/02 Javascript
浅谈PDF.js使用心得
2018/06/07 Javascript
手写Vue源码之数据劫持示例详解
2021/01/04 Vue.js
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
[01:28:31]《加油DOTA》真人秀 第五期
2014/09/01 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
[00:12]DAC2018 no[o]ne亮相SOLO赛 他是否如他的id一样无人可挡?
2018/04/06 DOTA
Python 查找字符在字符串中的位置实例
2018/05/02 Python
Python操作json的方法实例分析
2018/12/06 Python
python中对数据进行各种排序的方法
2019/07/02 Python
Python编译成.so文件进行加密后调用的实现
2019/12/23 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python如何输出整数
2020/06/07 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
十佳美德少年事迹材料
2014/02/05 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
复试通知单模板
2015/04/24 职场文书
创业计划书之美容店
2019/09/16 职场文书
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
2021/04/27 Python
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang