微信小程序 - 页面返回并传递数据(使用事件通道、操作页面栈)

一、使用事件通道

1、基本介绍
  1. 在 PageA 中,调用 wx.navigateTo 跳转时,在 events 中定义一个事件监听器,用于接收 PageB 返回的数据

  2. 在 PageB 中,先通过 getOpenerEventChannel 方法获取事件通道,在返回前触发事件并发送数据

2、演示
  1. PageA
html 复制代码
<Button bindtap="jumpToPageB">跳转到 pageB</Button>
js 复制代码
Page({
  jumpToPageB() {
    wx.navigateTo({
      url: "/pages/pageB/index",
      events: {
        getResult(data) {
          console.log("pageB 传递回来的数据:", data);
        },
      },
    });
  },
});
  1. PageB
html 复制代码
<Button bindtap="backToPageA">返回到 pageA</Button>
js 复制代码
Page({
  backToPageA() {
    const eventChannel = this.getOpenerEventChannel();
    eventChannel.emit("getResult", {
      id: 123,
      userInfo: {
        name: "李四",
        age: 30,
      },
    });

    wx.navigateBack();
  },
});

二、操作页面栈

1、基本介绍
  • 通过调用 getCurrentPages 方法获取页面栈实例,直接修改上一个页面的数据
2、演示
  1. PageA
html 复制代码
<Button bindtap="jumpToPageB">跳转到 pageB</Button>
<button bindtap="checkResult">检查返回数据</button>
js 复制代码
Page({
  data: {
    result: null,
  },
  jumpToPageB() {
    wx.navigateTo({
      url: "/pages/pageB/index",
    });
  },
  checkResult() {
    console.log("返回数据:", this.data.result);
  },
});
  1. PageB
html 复制代码
<Button bindtap="backToPageA">返回到 pageA</Button>
js 复制代码
Page({
  backToPageA() {
    const pages = getCurrentPages();
    const prevPage = pages[pages.length - 2];
    if (prevPage) {
      prevPage.setData({
        result: "some content",
      });
    }

    wx.navigateBack();
  },
});
相关推荐
wscats5 小时前
Markdown 编辑器技术调研
前端·人工智能·markdown
EnoYao5 小时前
Markdown 编辑器技术调研
前端·javascript·人工智能
weixin_440730505 小时前
java结构语句学习
java·开发语言·学习
JIngJaneIL5 小时前
基于java+ vue医院管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
量子联盟5 小时前
功能完整的PHP站点导航管理系统php程序;开源免费下载
开发语言·php
仙俊红5 小时前
在 Java 中,`==` 和 `equals()` 的区别
java·开发语言·jvm
JIngJaneIL6 小时前
基于java + vue校园跑腿便利平台系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
前端要努力6 小时前
月哥创业3年,还活着!
前端·面试·全栈
sao.hk6 小时前
ubuntu2404安装k3s
前端·chrome
cos6 小时前
Worktrunk 完全指南:让 Git Worktree 和 Claude Code 和平共处
前端·ai编程·claude