- 使用全局变量实现数据传递 :在app.js文件中定义全局变量globalData,在源页面设置变量的值,目标页面通过getApp().globalData获取变量的值。
假设我们有一个全局的用户信息,需要在多个页面中使用,如用户名、头像等。
app.js
App({
globalData: {
userInfo: null // 初始化为null,后续可以通过登录等操作设置值
}
});
xxx.js
const app = getApp();
// 设置全局变量
app.globalData.userInfo = {name: '张三', avatarUrl: 'http://example.com/avatar.jpg'};
// 获取全局变量
console.log(app.globalData.userInfo);
- 页面跳转或重定向时,使用url带参数传递数据 :通过在跳转链接中附加参数,目标页面在onLoad函数中通过options参数获取传递的值。
假设我们有一个商品列表页面(pages/productList/productList),当用户点击某个商品时,我们想要跳转到商品详情页面(pages/productDetail/productDetail)并传递商品ID。
productList.js
wx.navigateTo({
url: `/pages/productDetail/productDetail?productId=${productId}` // 假设productId是用户点击商品的ID
});
productDetail.js
Page({
onLoad: function (options) {
// options中包含了从URL中解析出的参数
const productId = options.productId;
// 使用productId进行后续操作,如请求商品详情数据等
}
});
- 事件触发传参 :通过事件绑定,在源页面触发事件传递需要的参数,目标页面通过事件对象获取传递的值。
- 使用缓存传递参数 :使用wx.setStorageSync()在源页面设置存储的值,目标页面通过wx.getStorageSync()获取值。
用户登录后,我们想要将登录凭证(如token)存储在缓存中,以便在后续请求中使用。
登录成功页面(loginSuccess.js)
wx.setStorageSync('token', loginToken); // 假设loginToken是登录成功后获取的token
需要token的页面(xxx.js)
const token = wx.getStorageSync('token');
// 使用token进行后续请求或其他操作
- 使用eventChannel(路由传参) :在页面跳转时,通过success回调函数中的eventChannel来向被打开页面传送数据。
A页面打开一个B页面,并希望在B页面打开后立即传递一些数据给B页面。
A.js
wx.navigateTo({
url: '/pages/B/B',
success: function (res) {
// 通过eventChannel向B页面发送数据
const eventChannel = res.eventChannel;
eventChannel.emit('acceptDataFromA', { data: '这是A页面传递的数据' });
}
});
B.js
Page({
onLoad: function (options) {
// 监听A页面通过eventChannel发送的数据
const eventChannel = this.getOpenerEventChannel();
eventChannel.on('acceptDataFromA', function (data) {
console.log(data); // 输出:{ data: '这是A页面传递的数据' }
});
}
});