您好,登錄后才能下訂單哦!
需求
一個商城的個人中心頁里,有很多用戶操作按鈕:我的訂單,我的提現(xiàn),我的送貨等等,每個圖標(biāo)在點擊的時候,可能是跳轉(zhuǎn)頁面的,也可能是執(zhí)行當(dāng)頁方法的。
目前需要寫一個通用的方法來實現(xiàn)這個功能,菜單的數(shù)據(jù)結(jié)構(gòu)是一樣的。
解決
菜單數(shù)據(jù)結(jié)構(gòu)
title: 菜單名
iconUrl: 圖標(biāo)url
type: page - 跳轉(zhuǎn)頁面 或者 method - 執(zhí)行方法
url: 點擊時跳轉(zhuǎn)的鏈接或執(zhí)行方法
badge: 圖標(biāo)上顯示的未讀信息數(shù)
// 營銷工具菜單組 menuListSell: [ {id: 0, title: '開團海報', type: 'page', url: '/pages/userCenter/poster/poster' ,iconUrl: '/assets/mine/poster.png', badge: 0}, {id: 1, title: '優(yōu)惠券包', type: 'method', url: 'showDeveloping' ,iconUrl: '/assets/mine/coupon.png', badge: 4}, {id: 2, title: '優(yōu)惠活動', type: 'method', url: 'showDiscountActivity' ,iconUrl: '/assets/mine/gift.png', badge: 0}, ],
頁面結(jié)構(gòu)是這樣的
<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>
每個圖標(biāo)菜單在點擊的時候,都會執(zhí)行 switchMenu
這個方法,獲取標(biāo)簽上的 url
、type
, 再通過 type
值判斷跳轉(zhuǎn)頁面還是執(zhí)行方法,如果 type === 'page'
就跳轉(zhuǎn)鏈接為 url
的頁面,如果 type !== 'page'
就執(zhí)行當(dāng)頁名為 url
的方法。當(dāng)然,這個方法需要事先在當(dāng)前頁面中已經(jīng)寫好。
重要 主要是如何執(zhí)行名為 url
的方法:因為要執(zhí)行的 url
方法是 this 的一個對象,所以可以直接使用 this['對象字符串']()
來執(zhí)行這個方法, this['對象字符串']
定位到了這個方法的引用,再加上 ()
就可以執(zhí)行這個方法,如下:
// 菜單點擊 switchMenu(e){ // 獲取標(biāo)簽上的數(shù)據(jù) let pageUrl = e.currentTarget.dataset.url; let type = e.currentTarget.dataset.type; if (type === 'page'){ // 跳轉(zhuǎn)頁面時 wx.navigateTo({ url: pageUrl }) } else { // 調(diào)用方法時 this[pageUrl]() } },
結(jié)果
這位,就可以實現(xiàn)頁面跳轉(zhuǎn)和方法執(zhí)行了
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。