uni-app 跳转页面传参

uni-app Vue2 和 Vue3 页面跳转传参方法

在 uni-app 中,无论是 Vue2 还是 Vue3,页面跳转传参的方式基本一致,主要通过 uni.navigateTouni.redirectTo 等 API 实现。以下是常见的方法:


URL 拼接传参

通过 url 拼接参数,目标页面通过 onLoad 生命周期钩子接收参数。

javascript 复制代码
// 跳转页面并传参
uni.navigateTo({
  url: '/pages/detail/detail?id=123&name=test'
});

目标页面接收参数:

javascript 复制代码
// 目标页面
export default {
  onLoad(options) {
    console.log(options.id); // 123
    console.log(options.name); // test
  }
}

Vue2 中使用 Vuex:

javascript 复制代码
// store.js
export default new Vuex.Store({
  state: {
    pageParams: {}
  },
  mutations: {
    setPageParams(state, params) {
      state.pageParams = params;
    }
  }
});

// 发送页面
this.$store.commit('setPageParams', { id: 123, name: 'test' });
uni.navigateTo({ url: '/pages/detail/detail' });

// 目标页面
computed: {
  pageParams() {
    return this.$store.state.pageParams;
  }
}
 

通过事件通道传参(Vue3 推荐)

  • 方法1
    Vue3 中可以使用 uni.$emituni.$on 实现跨页面通信。

发送参数:

javascript 复制代码
// 发送页面
uni.navigateTo({
  url: '/pages/detail/detail',
  success: () => {
    uni.$emit('updateData', { id: 123, name: 'test' });
  }
});

接收参数:

javascript 复制代码
// 目标页面
export default {
  mounted() {
    uni.$on('updateData', (data) => {
      console.log(data.id); // 123
      console.log(data.name); // test
    });
  },
  beforeUnmount() {
    uni.$off('updateData');
  }
}
  • 方法2
js 复制代码
// 发送方
		uni.navigateTo({
			url: '/pages/user/order/payment',
			// 页面跳转传参数(navigateTo 调用成功后)
			success: (res) => {
				res.eventChannel.emit('orderInfo', detail)
			},
			events: {
				// 监听b.vue返回的参数
				successful(data) {
					console.log(JSON.stringify(data, null, 2))
				},
			}
		});
js 复制代码
// 接收方
	import {
		getCurrentInstance
	} from 'vue';
	const instance = getCurrentInstance();
	onLoad(() => {
		const eventChannel = instance.proxy.getOpenerEventChannel();
		eventChannel.on('orderInfo', (data) => {
			console.log('data', data)
		});
	});

通过本地缓存

对于需要持久化的数据,可以使用 uni.setStorageSyncuni.getStorageSync

发送参数:

javascript 复制代码
uni.setStorageSync('pageParams', { id: 123, name: 'test' });
uni.navigateTo({ url: '/pages/detail/detail' });

接收参数:

javascript 复制代码
// 目标页面
export default {
  onLoad() {
    const params = uni.getStorageSync('pageParams');
    console.log(params); // { id: 123, name: 'test' }
  }
}

使用 uni.$once 实现一次性传参

Vue3 中可以通过 uni.$once 实现一次性事件监听。

发送参数:

javascript 复制代码
uni.navigateTo({
  url: '/pages/detail/detail',
  success: () => {
    uni.$emit('onceData', { id: 123, name: 'test' });
  }
});

接收参数:

javascript 复制代码
// 目标页面
export default {
  mounted() {
    uni.$once('onceData', (data) => {
      console.log(data); // { id: 123, name: 'test' }
    });
  }
}

总结

  • 简单参数:使用 URL 拼接传参。
  • 复杂数据:Vue2 用 Vuex,Vue3 用 事件通道。
  • 临时数据 :使用 uni.$emituni.$on
  • 持久化数据 :使用本地缓存。
    根据具体需求选择合适的方式。
相关推荐
Alice-YUE1 小时前
【js高频八股】防抖与节流
开发语言·前端·javascript·笔记·学习·ecmascript
是上好佳佳佳呀2 小时前
【前端(十一)】JavaScript 语法基础笔记(多语言对比)
前端·javascript·笔记
CDN3603 小时前
排查实录:网站偶发502/504错误?360CDN回源超时配置与日志分析技巧
前端·数据库
之歆3 小时前
Day07_CSS盒子模型 · 样式继承 · 用户代理样式
前端·css
DanCheOo3 小时前
AI 应用的安全架构:Prompt 注入、数据泄露、权限边界
前端·人工智能·prompt·安全架构
We་ct4 小时前
深度剖析浏览器跨域问题
开发语言·前端·浏览器·跨域·cors·同源·浏览器跨域
weixin_427771615 小时前
前端调试隐藏元素
前端
爱上好庆祝6 小时前
学习js的第五天
前端·css·学习·html·css3·js
C澒6 小时前
IntelliPro 产研协作平台:基于 AI Agent 的低代码智能化配置方案设计与实现
前端·低代码·ai编程
一袋米扛几楼986 小时前
【Git】规范化协作:详解 GitHub 工作流中的 Issue、Branch 与 Pull Request 最佳实践
前端·git·github·issue