情况1:父页面→传参到→子页面→传参到→父页面
父页面
uni.navigateTo({ url: '子页面路径?参数名1=1&参数名2=JSON.stringify(对象2)', }); //如果要传很长的参数或对象,建议使用events、eventChannel(url有长度限制,太长的字符串会传递失败,可改用窗体通信、全局变量,另外参数中出现空格等特殊字符时需要对参数进行编码encodeURIComponent)---------------------------------------- uni.navigateTo({ url: '被打开页面路径', events: { // 被打开页面的数据→传→当前页面 fromOpenedPage:d=>{ console.log(d); }, fromOpenedPage2:d=>{ console.log(d); }, ... }, success:d=>{ // 当前页面的数据→传→被打开页面 d.eventChannel.emit('toOpenedPage', '传给被打开页面的数据'); } })
export default { onLoad(d) { console.log(d.参数名1);//输出 1 console.log(JSON.parse(d.参数名2));//输出 对象2 } //获取很长的url参数采用以下方法---------------------------------------- onLoad(d) { this.getOpenerEventChannel().emit('fromOpenedPage', '传回给上次打开的页面'); this.getOpenerEventChannel().emit('fromOpenedPage2', '传回给上次打开的页面2'); // 监听toOpenedPage事件,获取上一页面通过eventChannel传送到当前页面的数据 this.getOpenerEventChannel().on('toOpenedPage', d=>{ console.log(d); }) } }
情况2:子页面→传参到→父页面
子页面
uni.$emit('传参事件名', { 参数名1: 1, 参数名2: {a:1,b:2} });
父页面
onLoad(){ // 监听事件 uni.$on('传参事件名',d=>{ console.log(d);//{参数名1: 1,参数名2: {a:1,b:2}} }) }, onUnload() { // 移除监听事件 uni.$off('传参事件名'); },