小程序真题合集-8. 小程序传递数据的方法

时间:2024-06-09 20:08:36
  • 使用全局变量实现数据传递 :在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页面传递的数据' }  
    });  
  }  
});