早期
先来看早期(2017年)的一篇解决方案:微信小程序跨页面通信解决思路
这里总结出两种方案:
方案一:获取Page实例,然后setData更新数据的,跟业务的耦合性比较大。
方案二:使用发布订阅模式,但这种多了以后,同样不容易进行后期的维护。
现状
基础库2.7.3(2019年)开始支持页面间通信。
如果一个页面由另一个页面通过 wx.navigateTo 打开,这两个页面间将建立一条数据通道:
- 被打开的页面可以通过 this.getOpenerEventChannel() 方法来获得一个 EventChannel 对象。
- wx.navigateTo 的 success 回调中也包含一个 EventChannel 对象。
这两个EventChannel对象间可以使用 emit 和 on 方法相互发送、监听事件。
====== demo ======
// pages/home/home.wxml
<view>{
{sum}}</view>
<button type="primary" bindtap="nav">测试页面间传值</button>
// pages/home/home.js
Page({
data: {
sum: 0
},
onLoad: function(options) {
},
nav: function(e) {
const that = this;
wx.navigateTo({
url: '/pages/nav/nav',
// 这里的events与success中的res.eventChannel作用相同
// events: {
// sendEvent: function(data) {
// console.log('data: ', data);
// const { sum } = data;
// console.log('sum: ', sum);
// that.setData({ sum });
// }
// },
success: function(res) {
console.log('res: ', res);
res.eventChannel.emit('receiveEvent', {
a: 9,
b: 10
})
res.eventChannel.on('sendEvent', function(

本文探讨了微信小程序早期的跨页面通信解决方案,包括通过Page实例和发布订阅模式,并指出其存在的问题。随着基础库的更新,从2.7.3版本开始支持更便捷的页面间通信接口。现在,当一个页面通过wx.navigateTo打开另一个页面,两者之间可以建立数据通道,利用EventChannel对象的emit和on方法进行事件传递和监听,提高了通信的便利性和维护性。
最低0.47元/天 解锁文章
442

被折叠的 条评论
为什么被折叠?



