Vue3中從一個頁面(index)傳輸數(shù)值到另一個頁面(form)的方法詳解
前言
在 Vue 3 開發(fā)中,經(jīng)常需要在不同組件或頁面之間傳遞數(shù)據(jù),例如從 index 頁面獲取某個數(shù)值(如 cntr、tradeId)后,將其傳輸?shù)?form 頁面進(jìn)行填寫或編輯
本文將介紹幾種常見的數(shù)據(jù)傳輸方法,并為每種方法提供一個小的 Demo 代碼示例
總結(jié)對比
| 方法 | 適用場景 | 適用數(shù)據(jù)類型 | 是否持久化 | 數(shù)據(jù)是否暴露 |
|---|---|---|---|---|
| URL 傳參 | 傳遞簡單數(shù)據(jù)(ID、狀態(tài)值) | 字符串、數(shù)字 | 否 | 是 |
| eventChannel | navigateTo 方式傳遞復(fù)雜數(shù)據(jù) | 對象、數(shù)組 | 否 | 否 |
| Vuex | 多個頁面共享數(shù)據(jù) | 對象、數(shù)組 | 是 | 否 |
| localStorage | 短期數(shù)據(jù)存儲、頁面刷新保持 | 對象、數(shù)組 | 是 | 否 |
推薦方案
- 如果只是傳遞少量數(shù)據(jù)(如 ID),URL 傳參最簡單
- 如果需要傳遞復(fù)雜對象(如 JSON),推薦 eventChannel
- 如果多個頁面共享數(shù)據(jù),Vuex 是更好的選擇
- 如果需要在頁面刷新后仍保留數(shù)據(jù),localStorage 是不錯的方案
一開始博主使用的第一種,后續(xù)由于參數(shù)過多,使用第二種:

1. URL 參數(shù)
適用于簡單數(shù)據(jù)傳遞,如字符串、數(shù)字等
實現(xiàn)步驟
- 在 index 頁面使用
uni.navigateTo或this.$router.push傳遞參數(shù) - 在 form 頁面通過
onLoad(options)或this.$route.query解析參數(shù)
index.vue
methods: {
goToForm() {
uni.navigateTo({
url: `/pages/form/form?cntr=manong123&tradeId=1`
});
}
}
form.vue
優(yōu)缺點
優(yōu)點:適合小型數(shù)據(jù)傳輸,如 ID、狀態(tài)值等
缺點:無法傳輸復(fù)雜對象(如 JSON),會導(dǎo)致數(shù)據(jù)丟失
2. eventChannel 通信
適用于需要傳輸復(fù)雜數(shù)據(jù)(如對象、數(shù)組)且不希望數(shù)據(jù)暴露在 URL 參數(shù)中的情況
實現(xiàn)步驟
- index 頁面通過 success 回調(diào),使用
eventChannel.emit傳輸數(shù)據(jù) - form 頁面通過
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)缺點
優(yōu)點:
適合傳輸復(fù)雜數(shù)據(jù),如 JSON 對象
數(shù)據(jù)不會暴露在 URL,安全性較高
缺點:僅適用于 uni.navigateTo 方式,不適用于 redirectTo 或 switchTab
3. Vuex共享
適用于多個頁面共享數(shù)據(jù),或者希望數(shù)據(jù)在頁面間持久化的情況
實現(xiàn)步驟
- 在 Vuex 的 store 中定義 state 并提供 mutation
- index 頁面調(diào)用 commit 方法存入數(shù)據(jù)
- form 頁面通過 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)缺點
優(yōu)點:
適用于全局狀態(tài)管理,多頁面數(shù)據(jù)共享
數(shù)據(jù)不會丟失,即使用戶返回上一頁
缺點:適用于大規(guī)模項目,小項目可能不必要
4. localStorage 或 sessionStorage
適用于頁面刷新后仍需保持?jǐn)?shù)據(jù)的情況,如緩存用戶輸入的信息
實現(xiàn)步驟
- index 頁面存入 localStorage
- form 頁面從 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)缺點
優(yōu)點:
適用于短期存儲,頁面刷新后數(shù)據(jù)仍可用
可用于 redirectTo、switchTab,不受 eventChannel 限制
缺點:
需要手動清理,否則可能導(dǎo)致存儲過多無用數(shù)據(jù)
以上就是Vue3中從一個頁面(index)傳輸數(shù)值到另一個頁面(form)的方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Vue3頁面?zhèn)鬏敂?shù)值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue-cli創(chuàng)建的項目中的gitHooks原理解析
這篇文章主要介紹了vue-cli創(chuàng)建的項目中的gitHooks原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
去除Element-Plus下拉菜單邊框的實現(xiàn)步驟
Element-Plus 是 Element UI 的 Vue 3 版本,它提供了一套完整的組件庫,在使用 Element-Plus 進(jìn)行開發(fā)時,我們可能會遇到需要自定義組件樣式的情況,本文將介紹如何使用 CSS 來去除 Element-Plus 下拉框的邊框,需要的朋友可以參考下2024-03-03
關(guān)于實現(xiàn)Vue3版抖音滑動插件踩坑指南
這篇文章主要給大家介紹了關(guān)于實現(xiàn)Vue3版抖音滑動插件踩坑指南,文中通過實例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue3具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2022-02-02
Vue3使用echarts tree高度自適應(yīng)支持滾動查看功能
這篇文章主要介紹了Vue3使用echarts tree高度自適應(yīng)支持滾動查看功能,文章同通過代碼示例介紹的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-06-06

