微信小程序?qū)崿F(xiàn)傳遞多個參數(shù)與事件處理
前言
開發(fā)過程中經(jīng)常會遇到從一個頁面攜帶數(shù)據(jù)到另一個頁面的情況,所以需要知道以下信息,什么是事件?有哪些傳遞方式?如果傳遞數(shù)組呢?如果傳遞對象呢?
一、事件
什么是事件
- 事件是視圖層到邏輯層的通訊方式
- 事件可以將用戶的行為反饋到邏輯層進行處理
- 事件可以綁定在組件上,當達到觸發(fā)事件,就會執(zhí)行邏輯層對應(yīng)的事件處理函數(shù)
- 事件對象可以攜帶額外信息,如id, dataset, touches
事件處理的使用
通過在wxml中設(shè)置bindtap、catchtap等,在js中寫對應(yīng)的實現(xiàn)方法(不過這種方式目前有個缺點,點擊的時候沒有點擊效果),使用方法如下
以下摘自微信小程序官方教程,在wxml中綁定一個事件
<view id="tapTest" data-hi="WeChat" bindtap="tapName"> Click me! </view>
然后在對應(yīng)的js中寫出事件的具體實現(xiàn)
Page({ tapName: function(event) { console.log(event) } })
事件分類
事件分為冒泡事件和非冒泡事件
- 冒泡事件:當一個組件上的事件被觸發(fā)后,該事件會向父節(jié)點傳遞
- 非冒泡事件:當一個組件上的事件被觸發(fā)后,該事件不會向父節(jié)點傳遞
一般使用場景中,例如一個列表的item中有多個點擊事件需要處理,就可以使用catchtap阻止向上冒泡
二、參數(shù)傳遞
參數(shù)傳遞有兩種方式
- 在wxml中使用navigator跳轉(zhuǎn)url傳遞參數(shù)
- 在wxml中綁定事件后,通過data-hi="參數(shù)"的方式傳遞
(1)navigator跳轉(zhuǎn)url傳遞字符串參數(shù)
代碼如下,將要傳遞到另一個頁面的字符串testId的值賦值到url中
<navigator class="test-item" url="../../pages/test/test?testId={{testData.testId}}"> ... </navigator>
在js頁面中onLoad方法中接收
Page({ onLoad: function(options) { var testId = options.testId console.log(testId) } })
(2)navigator跳轉(zhuǎn)url傳遞數(shù)組
如果一個頁面要將一個數(shù)組,如相冊列表傳遞到另一個頁面
<navigator class="test-item" url="../../pages/test/test?albumList={{testData.albumList}}"> ... </navigator>
傳遞到j(luò)s后從options中得到的是個字符串,每個圖片的url通過','分隔,所以此時還需要對其進行處理,重新組裝為數(shù)組
Page({ data: { // 相冊列表數(shù)據(jù) albumList: [], }, onLoad: function (options) { var that = this; that.setData({ albumList: options.albumList.split(",") }); } })
(3)wxml中配置data-testid傳遞字符串
這種方式一般是在wxml中綁定事件,同時設(shè)置需要傳遞的數(shù)據(jù),如果需要傳遞多個,可以寫多個data-[參數(shù)]的方式進行傳遞
<view bindtap="clickMe" data-testId={{testId}}"> ... </view>
在js頁面中自定義方法clickMe中接收
Page({ clickMe: function(event) { var testId = event.currentTarget.dataset.testid; wx.navigateTo({ url: '../../pages/test/test' }) } })
注意:通過wxml設(shè)置data-[參數(shù)名]傳遞參數(shù),[參數(shù)名]只能是小寫,不能有大寫
(4)wxml中配置data-albumlist傳遞數(shù)組
其實原理同上,上代碼
<view bindtap="clickMe" data-albumlist={{testData.albumList}}"> ... </view>
在js頁面中自定義方法clickMe中接收
Page({ clickMe: function(event) { var albumList = event.currentTarget.dataset.albumlist.split(","); wx.navigateTo({ url: '../../pages/test/test' }) } })
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 微信小程序 動態(tài)修改頁面數(shù)據(jù)及參數(shù)傳遞過程詳解
- 微信小程序?qū)崿F(xiàn)頁面跳轉(zhuǎn)傳遞參數(shù)(實體,對象)
- 微信小程序?qū)W習(xí)筆記之跳轉(zhuǎn)頁面、傳遞參數(shù)獲得數(shù)據(jù)操作圖文詳解
- 微信小程序之頁面跳轉(zhuǎn)和參數(shù)傳遞的實現(xiàn)
- 微信小程序教程系列之頁面跳轉(zhuǎn)和參數(shù)傳遞(6)
- 微信小程序開發(fā)之數(shù)據(jù)存儲 參數(shù)傳遞 數(shù)據(jù)緩存
- 微信小程序 navigator 跳轉(zhuǎn)url傳遞參數(shù)
- 微信小程序之間的參數(shù)傳遞、獲取的操作方法
相關(guān)文章
JavaScript自定義localStorage監(jiān)聽事件的解決方法
在項目開發(fā)過程中,發(fā)現(xiàn)有很多時候進行l(wèi)ocalStorage.setItem()操作設(shè)置本地存儲后,頁面必須刷新才能夠獲取到存儲數(shù)據(jù),為了解決這個問題,就必須要用到自定義localStorage監(jiān)聽事件了,所以本文給大家介紹了自定義localStorage監(jiān)聽事件,需要的朋友可以參考下2024-10-10教你3分鐘利用原生js實現(xiàn)有進度監(jiān)聽的文件上傳預(yù)覽組件
這篇文章主要給大家介紹了關(guān)于如何3分鐘利用原生js實現(xiàn)有進度監(jiān)聽的文件上傳預(yù)覽組件的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用js具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07