Vue3中從一個(gè)頁(yè)面(index)傳輸數(shù)值到另一個(gè)頁(yè)面(form)的方法詳解
前言
在 Vue 3 開發(fā)中,經(jīng)常需要在不同組件或頁(yè)面之間傳遞數(shù)據(jù),例如從 index 頁(yè)面獲取某個(gè)數(shù)值(如 cntr、tradeId)后,將其傳輸?shù)?form 頁(yè)面進(jìn)行填寫或編輯
本文將介紹幾種常見的數(shù)據(jù)傳輸方法,并為每種方法提供一個(gè)小的 Demo 代碼示例
總結(jié)對(duì)比
方法 | 適用場(chǎng)景 | 適用數(shù)據(jù)類型 | 是否持久化 | 數(shù)據(jù)是否暴露 |
---|---|---|---|---|
URL 傳參 | 傳遞簡(jiǎn)單數(shù)據(jù)(ID、狀態(tài)值) | 字符串、數(shù)字 | 否 | 是 |
eventChannel | navigateTo 方式傳遞復(fù)雜數(shù)據(jù) | 對(duì)象、數(shù)組 | 否 | 否 |
Vuex | 多個(gè)頁(yè)面共享數(shù)據(jù) | 對(duì)象、數(shù)組 | 是 | 否 |
localStorage | 短期數(shù)據(jù)存儲(chǔ)、頁(yè)面刷新保持 | 對(duì)象、數(shù)組 | 是 | 否 |
推薦方案
- 如果只是傳遞少量數(shù)據(jù)(如 ID),URL 傳參最簡(jiǎn)單
- 如果需要傳遞復(fù)雜對(duì)象(如 JSON),推薦 eventChannel
- 如果多個(gè)頁(yè)面共享數(shù)據(jù),Vuex 是更好的選擇
- 如果需要在頁(yè)面刷新后仍保留數(shù)據(jù),localStorage 是不錯(cuò)的方案
一開始博主使用的第一種,后續(xù)由于參數(shù)過(guò)多,使用第二種:
1. URL 參數(shù)
適用于簡(jiǎn)單數(shù)據(jù)傳遞,如字符串、數(shù)字等
實(shí)現(xiàn)步驟
- 在 index 頁(yè)面使用
uni.navigateTo
或this.$router.push
傳遞參數(shù) - 在 form 頁(yè)面通過(guò)
onLoad(options)
或this.$route.query
解析參數(shù)
index.vue
methods: { goToForm() { uni.navigateTo({ url: `/pages/form/form?cntr=manong123&tradeId=1` }); } }
form.vue
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):適合小型數(shù)據(jù)傳輸,如 ID、狀態(tài)值等
缺點(diǎn):無(wú)法傳輸復(fù)雜對(duì)象(如 JSON),會(huì)導(dǎo)致數(shù)據(jù)丟失
2. eventChannel 通信
適用于需要傳輸復(fù)雜數(shù)據(jù)(如對(duì)象、數(shù)組)且不希望數(shù)據(jù)暴露在 URL 參數(shù)中的情況
實(shí)現(xiàn)步驟
- index 頁(yè)面通過(guò) success 回調(diào),使用
eventChannel.emit
傳輸數(shù)據(jù) - form 頁(yè)面通過(guò)
getOpenerEventChannel().on
監(jiān)聽并接收數(shù)據(jù)
index.vue
methods: { goToForm() { uni.navigateTo({ url: `/pages/form/form`, success: (page) => { if (page.eventChannel) { page.eventChannel.emit("setItemData", { cntr: "manong123", tradeId: "1", driverName: "碼農(nóng)研究僧" }); } } }); } }
form.vue
onLoad(options) { const eventChannel = this.getOpenerEventChannel(); eventChannel.on("setItemData", (itemData) => { this.itemData = itemData; }); }
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
適合傳輸復(fù)雜數(shù)據(jù),如 JSON 對(duì)象
數(shù)據(jù)不會(huì)暴露在 URL,安全性較高
缺點(diǎn):僅適用于 uni.navigateTo 方式,不適用于 redirectTo 或 switchTab
3. Vuex共享
適用于多個(gè)頁(yè)面共享數(shù)據(jù),或者希望數(shù)據(jù)在頁(yè)面間持久化的情況
實(shí)現(xiàn)步驟
- 在 Vuex 的 store 中定義 state 并提供 mutation
- index 頁(yè)面調(diào)用 commit 方法存入數(shù)據(jù)
- form 頁(yè)面通過(guò) mapState 獲取數(shù)據(jù)
store/index.js
export default { state: { itemData: {} }, mutations: { setItemData(state, data) { state.itemData = data; } } };
index.vue
methods: { goToForm() { this.$store.commit("setItemData", { cntr: "manong123", tradeId: "1", driverName: "碼農(nóng)研究僧" }); uni.navigateTo({ url: "/pages/form/form" }); } }
form.vue
computed: { itemData() { return this.$store.state.itemData; } }
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
適用于全局狀態(tài)管理,多頁(yè)面數(shù)據(jù)共享
數(shù)據(jù)不會(huì)丟失,即使用戶返回上一頁(yè)
缺點(diǎn):適用于大規(guī)模項(xiàng)目,小項(xiàng)目可能不必要
4. localStorage 或 sessionStorage
適用于頁(yè)面刷新后仍需保持?jǐn)?shù)據(jù)的情況,如緩存用戶輸入的信息
實(shí)現(xiàn)步驟
- index 頁(yè)面存入 localStorage
- form 頁(yè)面從 localStorage 讀取數(shù)據(jù)
index.vue
methods: { goToForm() { uni.setStorageSync("itemData", { cntr: "manong123", tradeId: "1", driverName: "碼農(nóng)研究僧" }); uni.navigateTo({ url: "/pages/form/form" }); } }
form.vue
onLoad(options) { this.itemData = uni.getStorageSync("itemData") || {}; }
優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
適用于短期存儲(chǔ),頁(yè)面刷新后數(shù)據(jù)仍可用
可用于 redirectTo、switchTab,不受 eventChannel 限制
缺點(diǎn):
需要手動(dòng)清理,否則可能導(dǎo)致存儲(chǔ)過(guò)多無(wú)用數(shù)據(jù)
以上就是Vue3中從一個(gè)頁(yè)面(index)傳輸數(shù)值到另一個(gè)頁(yè)面(form)的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue3頁(yè)面?zhèn)鬏敂?shù)值的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Vue使用PDF.js實(shí)現(xiàn)瀏覽pdf文件功能
這篇文章主要為大家詳細(xì)介紹了Vue如何使用PDF.js實(shí)現(xiàn)瀏覽pdf文件功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2023-04-04vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析
這篇文章主要介紹了vue-cli創(chuàng)建的項(xiàng)目中的gitHooks原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02vue2老項(xiàng)目vite升級(jí)改造過(guò)程記錄
目前vite主要默認(rèn)是支持給vue3使用的,并且如果使用官方的cli創(chuàng)建的項(xiàng)目一樣會(huì)默認(rèn)使用vue3去構(gòu)建項(xiàng)目,此時(shí)對(duì)于一些vue2的老項(xiàng)目就顯得不友好了,下面這篇文章主要給大家介紹了關(guān)于vue2老項(xiàng)目vite升級(jí)改造的相關(guān)資料,需要的朋友可以參考下2022-12-12去除Element-Plus下拉菜單邊框的實(shí)現(xiàn)步驟
Element-Plus 是 Element UI 的 Vue 3 版本,它提供了一套完整的組件庫(kù),在使用 Element-Plus 進(jìn)行開發(fā)時(shí),我們可能會(huì)遇到需要自定義組件樣式的情況,本文將介紹如何使用 CSS 來(lái)去除 Element-Plus 下拉框的邊框,需要的朋友可以參考下2024-03-03關(guān)于實(shí)現(xiàn)Vue3版抖音滑動(dòng)插件踩坑指南
這篇文章主要給大家介紹了關(guān)于實(shí)現(xiàn)Vue3版抖音滑動(dòng)插件踩坑指南,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue3具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-02-02Vue3使用echarts tree高度自適應(yīng)支持滾動(dòng)查看功能
這篇文章主要介紹了Vue3使用echarts tree高度自適應(yīng)支持滾動(dòng)查看功能,文章同通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下2024-06-06