微信小程序页面之间的传值方式

devtools/2024/12/26 21:05:14/

小程序>微信小程序的开发过程中,页面之间的传值是一个常见的操作。根据多年的实践,我就我所知道的小程序页面之间的传值方式,进行简单的总结。希望能够帮助大家。

一、URL参数传递

  1. 原理
  • 这种方式类似于网页开发中的URL传参。在小程序>微信小程序中,我们可以通过在navigator组件的url属性中添加参数来实现页面间传值(这种方式类似于浏览器路由中的search进行传值)。例如,当我们从页面A跳转到页面B时,可以在navigator的url中添加类似?key=value的参数。
  • 页面B可以通过onLoad生命周期函数获取这些参数。onLoad函数的参数options是一个对象,其中包含了从其他页面传递过来的参数。
  1. 示例代码
  • 在页面A的wxml文件中,假设我们有一个navigator组件用于跳转到页面B:
<navigator url="'/pages/pageB/pageB?name=John&age=20">跳转到页面B</navigator>
  • 或者在页面A中的控制脚本中,我们点击一个按钮,调用方法navigateTo,来进行跳转到页面B:
wx.navigateTo({url: '/pages/pageB/pageB?name=John&age=20'
});
  • 在页面B的js文件中,在onLoad函数中获取参数:
Page({onLoad: function(options) {console.log(options.name); // 输出: Johnconsole.log(options.age); // 输出: 20}
});

二、全局变量

  1. 原理
  • 小程序>微信小程序提供了app.js文件,它是整个小程序的全局应用对象。我们可以在app.js中定义全局变量,然后在不同的页面中访问和修改这些变量。这种方式适用于在多个页面之间共享数据,并且数据的改变可能会影响多个页面的显示情况。
  1. 示例代码
  • 在app.js文件中定义全局变量:
App({globalData: {userInfo: null}
});
  • 在页面A中设置全局变量的值:
const app = getApp();
Page({onLoad: function() {app.globalData.userInfo = {name: 'Alice', age: 22};}
});
  • 在页面B中获取全局变量的值:
const app = getApp();
Page({onLoad: function() {console.log(app.globalData.userInfo);}
});

三、事件总线(Event Bus)

  1. 原理
  • 事件总线是一种基于发布 - 订阅模式的传值方式。我们可以创建一个事件中心,在一个页面发布事件并传递数据,然后在其他订阅了该事件的页面接收数据。
  • 这种方式比较灵活,适用于页面之间没有直接关联(如不是父子关系等)的情况。
  1. 示例代码
  • 首先创建一个事件总线的工具文件(例如eventBus.js):
let eventBus = {eventList: {},on: function(eventName, callback) {if (!this.eventList[eventName]) {this.eventList[eventName] = [];}this.eventList[eventName].push(callback);},emit: function(eventName, data) {if (this.eventList[eventName]) {this.eventList[eventName].forEach(callback => {callback(data);});}}
};
module.exports = eventBus;
  • 在页面A中发布事件并传递数据:
const eventBus = require('../../utils/eventBus.js');
Page({
onLoad: function() {let data = {message: '这是从页面A传递的数据'};eventBus.emit('dataTransferEvent', data);}
});
  • 在页面B中订阅事件并接收数据:
const eventBus = require('../../utils/eventBus.js');
Page({onLoad: function() {eventBus.on('dataTransferEvent', function(data) {console.log(data.message);});}
});

四、使用本地存储(Storage)

  1. 原理
  • 小程序>微信小程序提供了本地存储wx.setStorageSync和wx.getStorageSync等方法。我们可以在一个页面将数据存储到本地存储中,然后在另一个页面从本地存储中获取数据。这种方式相对来说比较适合数据持久化存储和跨会话(用户关闭小程序后重新打开)的数据传递。
  1. 示例代码
  • 在页面A中存储数据:
Page({onLoad: function() {let data = {key: 'value'};wx.setStorageSync('dataKey', data);}
});
  • 在页面B中获取数据:
Page({onLoad: function() {let retrievedData = wx.getStorageSync('dataKey');console.log(retrievedData);}
});

五、使用页面栈(只对当前页面栈中存在的页面生效)

  • A页面部分js代码
 Page({data:{name:'斗帝蓝电霸王龙Pro',age:22},eatFood:function(food){console.log('eating '+ food)    }})
  • B页面部分js代码
 Page({onLoad: function (options) {// 获取当前页面栈const pages = getCurrentPages();// 获取上一页面对象let prePage = pages[pages.length - 2];console.log(prePage.data.name) // 斗帝蓝电霸王龙ProprePage.eatFood('斗帝蓝电霸王龙Pro') // eating 斗帝蓝电霸王龙Pro}})

以上就是小程序>微信小程序中常见的页面之间传值方式。在实际开发中,我们可以根据具体的业务场景和页面之间的关系来选择合适的传值方式,以达到高效、稳定的数据传递效果。


http://www.ppmy.cn/devtools/145624.html

相关文章

面试题整理15----K8s常见的网络插件有哪些

面试题整理15----K8s常见的网络插件有哪些 常见的K8s网络插件有Flannel,Calico,Cilium,Weave,Antrea,Kube-OVN等.其中Calico, Flannel, 和 Cilium较为常用. Flannel: 实现方式: 基于 VXLAN 或 UDP 隧道在节点之间创建网络覆盖。相对简单易于理解和部署。功能: 提供基本的网络连…

基于深度学习(HyperLPR3框架)的中文车牌识别系统-前言

参考链接&#xff1a; GitHub - szad670401/HyperLPR: 基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework. - szad670401/HyperL…

Pyside6 在 pycharm 中的配置

打开文件->设置 找到 工具->外部工具 点击 号 创建一个外部工具 QtDesigner 名称:QtDesigner 程序&#xff1a;D:\miniconda\envs\ergoAI-qt\Lib\site-packages\PySide6\designer.exe 实参&#xff1a;$FileName$ 工作目录&#xff1a;$FileDir$ PyUIC 名称&#xf…

taiwindcss

1.安装 npm install -D tailwindcss postcss autoprefixer npx tailwindcss init 这会创建一个 tailwind.config.js 文件。注意&#xff1a;一定通过px tailwindcss init方式创建 2.tailwind.config.js module.exports {content: [./index.html,./src/**/*.{js,ts,jsx,ts…

在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc

在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc &#x1f4d6; 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后&#xff0c;可能会遇到如下问题&#xff1a; node: /lib64/libm.so.6: version GLIBC_2.27’ not found (required by node) node: /lib64/libc.so.6:…

汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片

概述: 杰发科技自成立以来,一直专注于汽车电子芯片及相关系统的研发与设计。 产品布局: 合作伙伴: 杰发科技不断提升产品设计能力和产品工艺,确保产品达 到更高的质量标准。目前杰发科技已通过ISO9001质 量管理体系与CMMIL3认证。 杰发科技长期合作的供应商(芯片代工厂、…

今日总结 2024-12-25

一、开发要点总结 &#xff08;一&#xff09;组织架构编辑部门 数据交互与组件协作 共用 add-dept 组件实现新增和编辑场景&#xff0c;需精准区分两种场景下的数据获取、校验及处理逻辑。通过在父组件&#xff08;src/views/department/index.vue&#xff09;点击编辑时利用…

Gmsh有限元网格剖分(Python)---点、直线、平面的移动

Gmsh有限元网格剖分(Python)—点、直线、平面的移动和旋转 最近在学习有限元的网格剖分算法&#xff0c;主要还是要参考老外的开源Gmsh库进行&#xff0c;写一些博客记录下学习过程&#xff0c;方便以后回忆嘞。 Gmsh的官方英文文档可以参考&#xff1a;gmsh.pdf 但咋就说&a…