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
  • 持久化数据 :使用本地缓存。
    根据具体需求选择合适的方式。
相关推荐
一 乐1 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
C_心欲无痕1 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫1 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo2 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
北辰alk2 小时前
Vue 模板引擎深度解析:基于 HTML 的声明式渲染
vue.js
北辰alk2 小时前
Vue 自定义指令完全指南:定义与应用场景详解
vue.js
yinuo3 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
北辰alk3 小时前
Vue 动态路由完全指南:定义与参数获取详解
vue.js
北辰alk3 小时前
Vue Router 完全指南:作用与组件详解
vue.js
北辰alk3 小时前
Vue 中使用 this 的完整指南与注意事项
vue.js