在微信小程序中,主要有以下几种页面跳转的方法:
一、声明式导航
navigator 组件:
在 WXML 文件中使用<navigator>组件进行页面跳转。可以通过设置url属性指定要跳转的页面路径。
例如:<navigator url="/pages/detail/detail">跳转到详情页</navigator>。
可以设置open-type属性来控制跳转的方式,如navigate(保留当前页面,跳转到应用内的某个页面)、redirect(关闭当前页面,跳转到应用内的某个页面)、switchTab(跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面)等。
二、编程式导航
wx.navigateTo:
保留当前页面,跳转到应用内的某个页面。使用相对路径或绝对路径来指定目标页面。
例如:wx.navigateTo({ url: '/pages/detail/detail' })。
注意:小程序最多只能打开五层页面,如果超过五层,可以考虑使用wx.redirectTo或其他方式。
wx.redirectTo:
关闭当前页面,跳转到应用内的某个页面。
例如:wx.redirectTo({ url: '/pages/detail/detail' })。
wx.reLaunch:
关闭所有页面,打开到应用内的某个页面。
例如:wx.reLaunch({ url: '/pages/detail/detail' })。
wx.switchTab:
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面。
例如:wx.switchTab({ url: '/pages/index/index' })。
wx.navigateBack:
返回上一页面或多级页面。可以通过delta参数指定返回的页面层数。
例如:wx.navigateBack({ delta: 1 })表示返回上一页。
小程序页面跳转时,怎么实现页面间参数传递?
在微信小程序中,可以通过以下几种方式在页面跳转时实现参数传递:
一、使用路由参数
使用编程式导航传递参数:
在使用wx.navigateTo、wx.redirectTo或wx.reLaunch进行页面跳转时,可以在目标页面的路径后添加参数。
例如:wx.navigateTo({ url: '/pages/detail/detail?id=123' }),这里将参数id的值设置为123。
在目标页面(即detail页面)的onLoad生命周期函数中接收参数:
Page({
onLoad: function(options) {
const id = options.id;
console.log('接收到的参数 id:', id);
}
});
使用navigator组件传递参数:
在 WXML 文件中使用<navigator>组件时,可以在url属性中添加参数。
例如:<navigator url="/pages/detail/detail?id=123">跳转到详情页</navigator>。
在目标页面的onLoad生命周期函数中接收参数,方式与编程式导航相同。
二、使用全局变量
在小程序的app.js文件中定义全局变量:
App({
globalData: {
someParam: null
}
});
在源页面中设置全局变量的值:
const app = getApp();
app.globalData.someParam = '要传递的值';
wx.navigateTo({ url: '/pages/detail/detail' });
在目标页面中获取全局变量的值:
const app = getApp();
const paramValue = app.globalData.someParam;
console.log('从全局变量获取的参数值:', paramValue);
这种方式不太推荐,因为全局变量可能会被意外修改,导致数据混乱。
三、使用缓存
在源页面中使用wx.setStorageSync或wx.setStorage将参数存储到缓存中:
wx.setStorageSync('paramKey', '要传递的值');
wx.navigateTo({ url: '/pages/detail/detail' });
在目标页面的onLoad生命周期函数中使用wx.getStorageSync或wx.getStorage从缓存中获取参数:
Page({
onLoad: function() {
const paramValue = wx.getStorageSync('paramKey');
console.log('从缓存获取的参数值:', paramValue);
// 记得在适当的时候清除缓存,以免占用过多空间
wx.removeStorageSync('paramKey');
}
});
小程序页面跳转时,除了路由参数还可以用什么方式传递参数?
除了路由参数,还可以通过以下方式在小程序页面跳转时传递参数:
一、全局数据存储
可以利用小程序的全局变量来传递参数。在小程序的app.js文件中定义全局变量,在源页面设置全局变量的值,在目标页面获取全局变量的值。
例如:
在app.js中:
App({
globalData: {
sharedParam: null
}
});
在源页面:
const app = getApp();
app.globalData.sharedParam = '要传递的值';
wx.navigateTo({ url: '/pages/destination/destination' });
在目标页面:
const app = getApp();
const paramValue = app.globalData.sharedParam;
console.log('从全局变量获取的参数值:', paramValue);
但这种方式不太推荐,因为全局变量可能被意外修改,导致数据混乱。
二、本地存储(缓存)
在源页面使用本地存储存储参数:
wx.setStorageSync('paramKey', '要传递的值');
然后进行页面跳转。
在目标页面获取参数:
const paramValue = wx.getStorageSync('paramKey');
记得在适当的时候清除缓存,以免占用过多空间。
wx.removeStorageSync('paramKey');
三、事件总线(自定义事件)
可以使用第三方库或者自己实现一个简单的事件总线来传递参数。
创建一个事件中心对象:
const eventBus = {
events: {},
on(eventName, callback) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callback);
},
emit(eventName, data) {
if (this.events[eventName]) {
this.events[eventName].forEach(callback => callback(data));
}
}
};
在源页面发布事件:
const valueToPass = '参数值';
eventBus.emit('customEvent', valueToPass);
wx.navigateTo({ url: '/pages/destination/destination' });
在目标页面订阅事件:
onLoad() {
eventBus.on('customEvent', (data) => {
console.log('接收到的参数值:', data);
});
}
情况1 路由写错
仔细检查一下路由,而且一定要先在app.json中声明
情况2 跳转地址为tab栏的地址
已经在app.json栏配置过的tab栏地址不可以用普通跳转方法进行路由跳转。
wx.navigateTo(Object object)说明:
保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。
来源: wx.navigateTo(Object object) | 微信开放文档
这时需要将wx.navigateTo方法改为wx.switchTab方法。
如果你用的是navigator标签跳转,需要在标签中添加属性:open-type="switchTab",该属性默认为navigate,即“navigateTo”的跳转方式,改为switchTab,将对应 wx.switchTab 的功能。
链接:https://blog.csdn.net/sun_lei_chao/article/details/136941899
链接:https://blog.csdn.net/weixin_50883365/article/details/142957986