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

一、使用事件通道

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();
  },
});
相关推荐
Fuyo_111915 分钟前
C++中的活字印刷术——模板·初阶
开发语言·c++·笔记
在角落发呆16 分钟前
跨越网络鸿沟:传统文件传输与现代内网穿透的奇妙交响
开发语言·php
Season45019 分钟前
C++之模板元编程(前置知识 constexpr)
开发语言·c++
坚定信念,勇往无前21 分钟前
electron-vite 安装better-sqlite3
javascript·数据库·electron
AI玫瑰助手22 分钟前
Python运算符:比较运算符(等于不等等于大于小于)与返回值
android·开发语言·python
@菜菜_达29 分钟前
jquery.inputmask插件介绍
前端·javascript·jquery
QuZhengRong29 分钟前
【Luck-Report】缓存
java·前端·后端·vue·excel
jiayong2334 分钟前
前端面试题库 - 浏览器与网络篇
前端·网络·面试
Csvn38 分钟前
小程序开发:微信小程序与 uni-app 实战指南
前端
摸鱼小李上线了44 分钟前
vue项目页面添加水印实现方法
前端·javascript·vue.js