微信小程序实现全局参数共享,且实现全局参数变化时的页面间通信

首先,微信小程序中并没有提供直接的全局事件系统来监听全局参数的变化。因此,我们需要采用其他方式来达到这一目的。一种常见的方法是使用全局变量和事件监听来模拟全局事件系统。

1. 定义全局变量和事件

app.js 中定义全局变量,并提供一个方法来更新这些变量并触发事件。

// app.js  
App({  globalData: {  userInfo: null  },  // 更新全局变量并触发事件  updateGlobalData: function(key, value) {  this.globalData[key] = value;  this.triggerGlobalEvent(key, value);  },  // 触发全局事件  triggerGlobalEvent: function(key, value) {  const event = {  key: key,  value: value  };  // 通知所有页面  const pages = getCurrentPages();  pages.forEach(page => {  if (page && page.onGlobalDataChange) {  page.onGlobalDataChange(event);  }  });  }  
});

2. 修改全局变量并触发事件

当需要修改全局变量时,调用 updateGlobalData 方法

// 在某个页面的方法中  
const app = getApp();  
// 假设全局参数发生了变化  
const newUserInfo = { name: 'New User', avatarUrl: 'new_avatar_url' };  
app.updateGlobalData('userInfo', newUserInfo);

3. 在其他页面中监听全局事件

在需要监听全局参数变化的页面中,你可以在页面的生命周期方法(如 onLoadonShow)中订阅这个事件,并在事件处理函数中更新页面状态。

// pages/somePage/somePage.js  
Page({  data: {  userInfo: null  },  onLoad: function() {  const app = getApp();  // 监听全局变量变化  app.onGlobalDataChange = this.handleGlobalDataChange.bind(this);  // 初始化数据,检查全局变量是否已经有值  this.setData({  userInfo: app.globalData.userInfo  });  },  onUnload: function() {  const app = getApp();  // 取消监听全局变量变化  app.onGlobalDataChange = null;  },  handleGlobalDataChange: function(event) {  // 检查事件中的数据是否是我们关心的全局参数  if (event.key === 'userInfo') {  // 更新页面的数据绑定  this.setData({  userInfo: event.value  });  // 根据需要执行其他操作,如重新渲染视图等  }  }  
});

在上面的代码中,当全局变量变化时,updateGlobalData 方法会调用 triggerGlobalEvent 来遍历当前所有打开的页面,并调用每个页面上的 onGlobalDataChange 方法。每个页面需要在 onLoad 生命周期方法中绑定这个方法,并在 onUnload 生命周期方法中解绑,以避免内存泄漏。

注意事项:

  • 确保在页面的 onUnloadonHide 生命周期方法中取消订阅事件,以避免内存泄漏。
  • 如果你的小程序结构复杂,或者全局参数变化频繁,考虑使用更高级的状态管理方案,如 Vuex(如果你使用的是小程序与 Vue 结合的框架)或其他状态管理库。
  • 不要过度依赖全局状态,尽量保持组件的独立性,通过 props 和 events 进行父子组件间的通信。全局状态应仅用于存储那些确实需要在多个页面间共享的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/817708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[ostream_iterator]输出Fibonacci数列

描述 Fibonacci数列指的是数列第一项和第二项为1&#xff0c;之后每一项是之前两项的和所构成的数列。 现有多组数据&#xff0c;每组数据给出一个数字n&#xff0c;请你输出Fibonacci数列的前n-1项。 #include <iostream> #include <iterator> using namespace …

UE5 GAS开发P32,33 初始化状态并绑定在HUD上,拾取物品增加血量和减少蓝量

这节课主要是修改WidgetController和OverlayController,在EffectActor内新增了一个减少蓝量的代码,同时修复了一个bug,并且展示了为什么要写成单独的控制器,因为要考虑多人游戏的情况,每一个控制器都是一个单独的角色 首先修改AuraAttirbuteSet.cpp UAuraAttributeSet::UAura…

【C++】unordered_map unordered_set 底层刨析

文章目录 1. 哈希表的改造2. unordered_map3. unordered_set C STL 库中&#xff0c;unordered_map 和 unordered_set 容器的底层为哈希表&#xff0c;本文将简单模拟哈希表&#xff08;哈希桶&#xff09;&#xff0c;unordered_map 和 unordered_set 只需封装哈希表的接口即可…

C语言中static变量和普通变量有什么区别?

下面将从变量的存储周期和可见性&#xff0c;以及函数的链接属性等方面展开 1. static全局变量和普通全局变量有什么区别? static全局变量和普通全局变量都存储在静态存储区, 生命周期都是整个文件运行结束 但是, 普通全局变量在所有源文件中都是可见的, 如果一个源文件中定…

kylin Firefox Warning: Potential Security Risk Ahead

Warning: Potential Security Risk Ahead &#xfeff; Firefox detected a potential security threat and did not continue to 127.0.0.1. If you visit this site, attackers could try to steal information like your passwords, emails, or credit card details. 警告&…

java实现简单图书管理系统(附带源码)

项目要求 该项目会用到类和对象&#xff0c;封装、继承、多态、接口、等&#xff0c;会帮你巩固并加强这类知识 设计要求及思路 1.要求有两套系统分别给管理员和普通用户使用&#xff0c;经过开始的选择会有两个对应功能不同的菜单&#xff0c;这里两种角色我们可以放一个包…

华为ensp中nat地址转换(静态nat 动态nat NAPT 和Easy IP)配置命令

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月15日12点03分 实验拓扑 接下来我会分几个方面初步将静态nat和napt easy ip 首先基本的环境配置 AR1的基本配置 //基本的IP配置和默认路由指向外网 <Huawei&…

神仙级Python入门教程(超级详细),从零基础入门到精通,从看这篇开始

一、初聊Python 1.为什么要学习Python&#xff1f; 在学习Python之前&#xff0c;你不要担心自己没基础或“脑子笨”&#xff0c;我始终认为&#xff0c;只要你想学并为之努力&#xff0c;就能学好&#xff0c;就能用Python去做很多事情。在这个喧嚣的时代&#xff0c;很多技…

linux 数据链路层 socket编程 广播

在Linux系统中&#xff0c;要进行数据链路层的socket编程&#xff0c;并发送广播包&#xff0c;你可以使用原始套接字&#xff08;raw socket&#xff09;&#xff0c;并将IP头设置为广播地址。以下是一个简单的例子&#xff0c;展示如何使用原始套接字在数据链路层发送广播包&…

分布式锁介绍

引言 分布式锁是一种用于协调不同进程或线程对共享资源的访问控制的机制。在分布式系统中&#xff0c;由于多个节点可能同时访问或修改同一资源&#xff0c;因此需要一个中心化的协调机制来确保资源的访问是有序的&#xff0c;避免数据不一致的问题。 分布式锁的特性&#xf…

电子元器件供应链的优化与改进

优化和改进电子元器件供应链是确保企业竞争力和业务成功的关键一步。以下是一些优化和改进电子元器件供应链的方法&#xff1a;      供应链网络设计&#xff1a; 重新评估和优化供应链网络&#xff0c;确定最佳的供应商和分销商位置&#xff0c;以最大程度地降低成本、提高…

Java反序列化-(LazyMap)CC1链与CC6链

(LazyMap)CC1链 原版的CC1链&#xff1a; https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/CommonsCollections1.java可以发现对比之前的 TransformMap版本的CC1链&#xff0c;从这里开始就不一样了 分析LazyMap.get() 直接进入到Laz…

OnlyOffice配置minio文件存储

OnlyOffice配置minio文件存储 一、部署minio测试环境 拉取minio镜像 为了快速验证&#xff0c;此处使用docker安装部署minio服务。先拉取minio最新版镜像资源。 -bash-4.2# docker pull minio/minio:latest -bash-4.2# docker images | grep minio minio/minio …

企业业务系统与呼叫中心话务系统的无缝对接实现方案

在当今的商业环境中&#xff0c;企业的业务系统与呼叫中心话务系统的对接显得尤为重要。这种对接不仅提高了企业的运营效率&#xff0c;还增强了客户服务的体验。本文将探讨如何实现企业业务系统与呼叫中心话务系统的无缝对接&#xff0c;并分析其带来的好处。 一、对接的必要性…

用html写一个有趣的鬼魂动画

<!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>一个有趣的鬼魂动画</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.m…

2024第十五届蓝桥杯 JAVA B组

目录 前言&#xff1a;试题 A: 报数游戏试题 B: 类斐波那契循环数试题C:分布式队列 前言&#xff1a; 没参加这次蓝桥杯算法赛&#xff0c;十四届蓝桥杯被狂虐&#xff0c;对算法又爱又恨&#xff0c;爱我会做的题&#xff0c;痛恨我连题都读不懂的题&#x1f62d;,十四届填空只…

深度解析:国内实时音视频厂商核心功能对比

当前实时音视频开发领域呈现出多样化竞争态势&#xff0c;其中声网&#xff08;Agora&#xff09;、即构&#xff08;ZEGO&#xff09;等云通讯企业占据了市场的主导地位。随着技术的持续进步和用户需求的日益多样化&#xff0c;选择音视频服务提供商的标准也越来越个性化&…

如何在Linux系统部署Joplin笔记并结合内网穿透实现无公网IP远程访问

文章目录 1. 安装Docker2. 自建Joplin服务器3. 搭建Joplin Sever4. 安装cpolar内网穿透5. 创建远程连接的固定公网地址 Joplin 是一个开源的笔记工具&#xff0c;拥有 Windows/macOS/Linux/iOS/Android/Terminal 版本的客户端。多端同步功能是笔记工具最重要的功能&#xff0c;…

简单粗暴解决 wampapache 突然无法启动错误1053

问题是因为没有安装:vc_redist_x64 导致的 全网最简单粗暴解决下 DirectX_v4.1修复

注意力的本质

目录 Attention 的本质是什么 AI 领域的 Attention 机制 Attention 的3大优点 Attention 的原理 小故事讲解 Attention 原理的3步分解:</