小程序頁(yè)面之間數(shù)據(jù)傳遞的4種方法總結(jié)
前言
近期再使用小程序開發(fā)的時(shí)候遇到小程序頁(yè)面和頁(yè)面之間的數(shù)據(jù)傳遞問題??偨Y(jié)一下大致有以下幾種方式實(shí)現(xiàn)頁(yè)面數(shù)據(jù)傳遞。
最常見的就是路由傳參,使用場(chǎng)景主要是頁(yè)面匯總的少量數(shù)據(jù)的傳遞。以下都以Taro+vue示例,原生、react或者uniapp同理,替換以下關(guān)鍵字Taro即可
注意:以下的幾種方式會(huì)把參數(shù)string化,例如: true -> ‘true’; 1 -> ‘1’
1. 少量數(shù)據(jù)傳遞
例如: 從A頁(yè)面->B頁(yè)面
使用頁(yè)面跳轉(zhuǎn)navigateBack
保留當(dāng)前頁(yè)面,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面。但是不能跳到 tabbar 頁(yè)面。
參數(shù): ?
隔開,=
相連
A頁(yè)面
wx.navigateTo({ url: 'test?id=1' })
B頁(yè)面
import { useDidShow, useRouter } from "@tarojs/taro" // 在 show生命周期中獲取 useDidShow(() => { const router: any = useRouter(); const data = router.params ?? {}; // 取router里面的params });
這種適用于數(shù)據(jù)量少的情況,也不建議復(fù)雜或者數(shù)據(jù)量打的時(shí)候使用該方法(個(gè)人建議而已-.-)
2. 數(shù)據(jù)量大或者相對(duì)復(fù)雜的數(shù)據(jù)傳遞
從A頁(yè)面->B頁(yè)面,適用于頁(yè)面跳轉(zhuǎn)數(shù)據(jù)量較多或者復(fù)雜的數(shù)據(jù)時(shí)
A頁(yè)面
Taro.navigateTo({ url: '/test', success: function(res) { // 通過 eventChannel 向被打開頁(yè)面?zhèn)魉蛿?shù)據(jù) res.eventChannel.emit('test-data', { data: 'test' }) // res.eventChannel.emit 第二個(gè)參數(shù)是要傳遞的數(shù)據(jù) **第二個(gè)參數(shù)只能是key-value形式的對(duì)象** } })
B頁(yè)面,在show生命周期中獲取
useDidShow(() => { const current = pages[pages.length - 1]; const event = current.getOpenerEventChannel(); event.on('test-data', params => { console.log(params); // { data: 'test' } }); });
3. 返回上一個(gè)頁(yè)面的數(shù)據(jù)傳遞
B頁(yè)面->A頁(yè)面,從B頁(yè)面返回A頁(yè)面時(shí)需要傳遞一些數(shù)據(jù)時(shí)。返回上一個(gè)頁(yè)面navigateBack
示例:
B頁(yè)面返回上一個(gè)頁(yè)面
// 獲取全部頁(yè)面 let pages= getCurrentPages() // 獲取前一個(gè)頁(yè)面的序號(hào) let prevPage = pages[pages.length - 1] // 給前一個(gè)頁(yè)面設(shè)置數(shù)據(jù) prevPage.setData({...}) wx.navigateBack({ delta: 1 // 返回一個(gè)頁(yè)面 // 返回的頁(yè)面數(shù),如果 delta 大于現(xiàn)有頁(yè)面數(shù),則返回到首頁(yè) })
在A頁(yè)面
useDidShow(async () => { const data = Taro.getCurrentInstance().page.data ; // 頁(yè)面返回的參數(shù) })
4. 使用本地緩存
使用setStorageSync
和getStorageSync
(建議在以上三種都不滿足使用場(chǎng)景時(shí)使用該方法)
// set Taro.setStorageSync('test', data); // get Taro.getStorageSync('test')
目前接觸就這四種,應(yīng)該還有其他方式,只是常用這四種。歡迎補(bǔ)充和指正。
總結(jié)
到此這篇關(guān)于小程序頁(yè)面之間數(shù)據(jù)傳遞的4種方法的文章就介紹到這了,更多相關(guān)小程序頁(yè)面間數(shù)據(jù)傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 微信小程序 頁(yè)面跳轉(zhuǎn)和數(shù)據(jù)傳遞實(shí)例詳解
- 微信小程序 頁(yè)面跳轉(zhuǎn)及數(shù)據(jù)傳遞詳解
- 微信小程序 動(dòng)態(tài)修改頁(yè)面數(shù)據(jù)及參數(shù)傳遞過程詳解
- 微信小程序開發(fā)之?dāng)?shù)據(jù)存儲(chǔ) 參數(shù)傳遞 數(shù)據(jù)緩存
- 小程序?qū)崿F(xiàn)頁(yè)面跳轉(zhuǎn)與數(shù)據(jù)傳遞方案
- 微信小程序開發(fā)實(shí)用技巧之?dāng)?shù)據(jù)傳遞和存儲(chǔ)
- 微信小程序 跳轉(zhuǎn)傳遞數(shù)據(jù)的實(shí)例
相關(guān)文章
JavaScript實(shí)現(xiàn)非常簡(jiǎn)單實(shí)用的下拉菜單效果
這篇文章主要介紹了JavaScript實(shí)現(xiàn)非常簡(jiǎn)單實(shí)用的下拉菜單效果,通過定義顯示及隱藏菜單項(xiàng)及鼠標(biāo)事件調(diào)用該函數(shù)實(shí)現(xiàn)下拉菜單功能,需要的朋友可以參考下2015-08-08編寫js擴(kuò)展方法判斷一個(gè)數(shù)組中是否包含某個(gè)元素
判斷集合是否包含某個(gè)元素我們可以利用js的原型擴(kuò)展來封裝一個(gè)我們自己的Contains方法,具體思路及實(shí)現(xiàn)如下,感興趣的朋友可以參考下2013-11-11JavaScript 函數(shù)式編程實(shí)踐(來自IBM)
說到函數(shù)式編程,人們的第一印象往往是其學(xué)院派,晦澀難懂,大概只有那些蓬頭散發(fā),不修邊幅,甚至有些神經(jīng)質(zhì)的大學(xué)教授們才會(huì)用的編程方式。2010-06-06List the UTC Time on a Computer
List the UTC Time on a Computer...2007-06-06基于JavaScript實(shí)現(xiàn)年月日三級(jí)聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了基于JavaScript實(shí)現(xiàn)年月日三級(jí)聯(lián)動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06jQuery animate()實(shí)現(xiàn)背景色漸變效果的處理方法【使用jQuery.color.js插件】
這篇文章主要介紹了jQuery animate()實(shí)現(xiàn)背景色漸變效果的處理方法,結(jié)合實(shí)例形式分析了jQuery顏色插件jquery.color.js實(shí)現(xiàn)背景色漸變的簡(jiǎn)單操作技巧,需要的朋友可以參考下2017-03-03javascript簡(jiǎn)單實(shí)現(xiàn)跟隨滾動(dòng)條漂浮的返回頂部按鈕效果
這篇文章主要介紹了javascript簡(jiǎn)單實(shí)現(xiàn)跟隨滾動(dòng)條漂浮的返回頂部按鈕效果,涉及javascript基于onscroll事件動(dòng)態(tài)改變頁(yè)面元素樣式的相關(guān)技巧,需要的朋友可以參考下2016-08-08javascript同頁(yè)面多次調(diào)用彈出層具體實(shí)例代碼
一個(gè)在同一個(gè)頁(yè)面可多次調(diào)用的javascript彈出層效果,有需要的同學(xué)可以參考一下2013-08-08