小程序之页面通信派发通知

news2025/1/9 16:29:22

在这里插入图片描述

文章目录

  • 1. 介绍小程序页面通信的概念
    • 解释小程序页面通信的意义和必要性
    • 介绍小程序页面通信的方法
  • 2. 小程序页面通信的实现示例
    • 通过事件传递数据实现页面之间通信
    • 通过全局变量实现页面之间通信
  • 3. 实现小程序页面之间的消息通知
    • 介绍小程序发布订阅模式的概念
    • 使用事件订阅-发布模式实现页面消息派发
    • 示例:在小程序中实现消息通知功能

1. 介绍小程序页面通信的概念

解释小程序页面通信的意义和必要性

小程序页面通信指的是不同页面之间传递数据、状态和事件的过程。

它的意义和必要性在于:

  1. 提高小程序的用户体验:通过页面通信,可以实现不同页面之间的数据共享和交互,使用户在使用小程序时更加流畅、便捷。

  2. 优化开发效率:小程序页面通信可以简化开发流程,避免重复的代码编写和数据传递逻辑的处理。

  3. 支持复杂场景的开发:在需要实现较为复杂的页面交互和数据传递逻辑时,小程序页面通信可以帮助开发者实现更加灵活、即时的数据传递和状态更新。

综上所述,小程序页面通信是小程序开发中非常重要的一部分,它可以提高用户体验、优化开发效率,同时也可以支持更加复杂的场景开发。

介绍小程序页面通信的方法

小程序页面通信有多种方法,常用的包括:

  1. 全局变量:通过在 app.js 中定义全局变量,不同页面之间可以共享这些变量。但是使用全局变量需要注意不要滥用,因为会增加程序的耦合度,也容易造成命名冲突或数据安全问题。

  2. 自定义事件:小程序可以通过 wx.triggerEvent 方法触发自定义事件并传递数据,在页面中通过绑定该事件和方法来接收数据。这种方式相对于全局变量来说更加灵活,可以在需要交换数据时精准触发。

  3. 页面跳转参数传递:在小程序中,跳转页面时可以通过 url 上的 query 参数向目标页面传递数据,目标页面可以在 onLoad 生命周期函数中获取传递的参数。

  4. Storage API:通过WX提供的Storage API可以实现基于本地缓存的数据共享。可以将需要共享的数据保存在Storage中,不同页面之间通过设置和获取操作来实现数据的传递与共享。

总的来说,小程序页面通信的方法丰富多样,开发者可以根据具体场景选择适合的方法来实现页面之间数据的传递和交互。需要注意的是,在使用页面通信方法时,也要注意数据的安全性和传递的精准性。

2. 小程序页面通信的实现示例

通过事件传递数据实现页面之间通信

通过事件传递数据是实现小程序页面之间通信的一种常见方式。下面我将介绍一种使用自定义事件来传递数据的方法:

1. 在需要被传递数据的页面定义事件

在需要被传递数据的页面中定义一个自定义事件,并通过 this.triggerEvent() 方法触发该事件,并将需要传递的数据通过参数传入方法中。

// 在需要被传递数据的页面定义一个自定义事件
Component({
  methods: {
    onTap: function() {
      var data = "需要传递的数据";
      this.triggerEvent('myevent', data);
    }
  }
})

2. 在需要接收数据的页面监听事件

在需要接收传递数据的页面中监听该自定义事件,并在监听函数中获取数据。

// 在需要接收数据的页面监听自定义事件
Page({
  data: {
    receivedData: ''
  },
  onLoad: function() {
    this.onMyEvent = this.onMyEvent.bind(this);
    this.selectComponent("#component").on('myevent', this.onMyEvent);
  },
  onMyEvent: function(event) {
    console.log(event.detail); // 输出需要被传递的数据
    this.setData({
      receivedData: event.detail
    })
  }
})

3. 触发自定义事件并传递数据

在被传递数据的页面中调用该自定义事件的触发函数,从而触发该事件并在需要接收数据的页面中传递数据。

// 触发自定义事件
onTap: function () {
  var data = "需要传递的数据";
  this.triggerEvent('myevent', data);
},

使用上述方法,就可以实现小程序页面之间通过事件传递数据,实现页面之间的通信。需要注意的是,在实际应用中,开发者需要灵活应用该方法,根据具体场景选择正确的事件传递方式。另外,在使用事件传递数据时,需要确保传递的数据量不要太大,防止影响程序性能。

通过全局变量实现页面之间通信

通过定义全局变量是另一种实现小程序页面之间通信的常用方式。下面我将介绍一种使用全局变量来实现页面之间通信的具体方法:

1. 在 app.js 中定义全局变量

在 app.js 中,通过 App() 方法可以创建应用实例,也可以定义全局变量。开发者可以在 globalData 对象上定义需要共享的变量。

App({
  globalData: {
    sharedData: '需要传递的数据'
  }
})

2. 在需要接收数据的页面中获取全局变量

在需要接收数据的页面中,通过 getApp() 方法获取应用实例,并从 globalData 对象中获取相应的变量。

Page({
  onLoad: function() {
    var appInstance = getApp();
    var sharedData = appInstance.globalData.sharedData;
    console.log(sharedData); // 输出 '需要传递的数据'
  }
})
  1. 在需要修改数据的页面中修改全局变量

如果需要修改全局变量,可以在需要修改的页面中调用 getApp() 方法获取应用实例,并通过修改 globalData 对象上相应的变量来实现修改。

onTap: function () {
  var appInstance = getApp();
  appInstance.globalData.sharedData = '修改后的数据';
},

通过使用全局变量,实现小程序页面之间的数据通信。需要注意的是,使用全局变量需要注意变量名的唯一性和变量的安全性。在实际应用中,开发者需要根据具体场景选择适合的方法来实现页面之间的通信。

3. 实现小程序页面之间的消息通知

介绍小程序发布订阅模式的概念

小程序发布订阅模式是一种常用的设计模式,也称为观察者模式,它用于解决组件之间的数据传递问题

它的核心思想是一个组件充当发布者,一到多个组件充当订阅者,发布者向订阅者发布事件,订阅者响应这个事件并执行相应的动作。

该设计模式包含以下几个要素:

  1. 主题(Subject):负责监听所有的观察者(订阅者),并在数据变化时通知它们更新。

  2. 观察者(Observer):接收主题(Subject)的通知并更新自己的状态。

  3. 事件(Event):在主题(Subject)和观察者(Observer)之间传递的信息。

  4. 客户端(Client):创建主题(Subject)和观察者(Observer)并组织它们之间的交互。

在小程序中,组件之间的数据交互可以通过事件机制来实现发布订阅模式。具体来说,一个组件通过 this.triggerEvent() 方法触发自定义事件并传递数据,其他组件把相应的函数绑定到这个自定义事件上,当该自定义事件触发时响应相应函数并获取数据。

通过采用该设计模式,小程序的组件可以相互解耦,不需要直接调用其他组件中的方法即可实现数据的传递和状态的更新。同时也避免了在多个组件中使用全局变量或者事件监听的方式,提高了小程序的代码可读性和可维护性。

使用事件订阅-发布模式实现页面消息派发

使用事件订阅-发布模式实现页面消息派发,需要使用到小程序自定义事件和事件监听器的功能。

1. 定义事件

在需要处理页面消息的页面或组件中定义自定义事件,例如:

Component({
  methods: {
    sendMessage: function(message) {
      this.triggerEvent('pageMessage', {message});
    }
  }
})

这段代码定义了一个名为 pageMessage 的自定义事件,并在该组件的 sendMessage 方法中触发该事件并传递消息。

2. 事件监听

在需要接收消息的页面或组件中监听自定义事件 pageMessage,例如:

Page({
  // ... 其他代码 ...
  onLoad: function() {
    var that = this;
    that.selectComponent('#myComponent').on('pageMessage', function(event) {
      console.log(event.detail.message);
      // ... 处理所接收到的消息 ...
    })
  }
})

这段代码中,我们调用了 selectComponent 方法获取名为 myComponent 的组件,并在其上使用 .on() 方法监听 pageMessage 事件,并在事件触发时响应事件处理函数,处理所接收到的消息。

  1. 派发事件

在需要发送消息的页面或组件中,调用需要发送消息的组件的 sendMessage 方法,例如:

Page({
  // ... 其他代码 ...
  onTap: function() {
    var that = this;
    that.selectComponent('#myComponent').sendMessage('这是一条消息');
  }
})

调用 selectComponent 方法获取名为 myComponent 的组件,然后调用其 sendMessage 方法,并将消息作为参数传递给该方法,从而实现事件的派发。

通过上述方法,我们可以实现小程序页面间的消息派发和监听,实现页面的松耦合,提高代码灵活性。需要注意的是,使用该方法时,应该根据具体场景选择正确的组件和通信方式,避免代码混乱和性能问题。

示例:在小程序中实现消息通知功能

在小程序中实现消息通知功能,可以使用事件订阅-发布模式,具体步骤如下:

1. 创建一个消息通知服务

创建一个消息通知服务,用来处理消息的添加、删除、查看等操作,例如:

class NotifyService {
  constructor() {
    this.notifyList = [];
  }

  addNotify(notify) {
    this.notifyList.push(notify);
    this.emitNotify();
  }

  removeNotify(id) {
    this.notifyList = this.notifyList.filter(item => item.id !== id);
    this.emitNotify();
  }

  emitNotify() {
    getApp().eventEmitter.emit('notifyChange', this.notifyList);
  }
}

module.exports = new NotifyService();

在此示例中,我们定义了一个名为 NotifyService 的类,用于管理通知列表,改变通知列表时,通过 emitNotify 方法触发事件,并将通知列表作为参数传递给事件监听器。

2. 创建一个事件监听器

在需要接收通知的页面或组件中定义一个事件监听器,用来处理通知列表的变化,例如:

Page({
  data: {
    notifyList: []
  },

  onLoad: function() {
    var that = this;
    getApp().eventEmitter.on('notifyChange', function(notifyList) {
      that.setData({
        notifyList: notifyList
      });
    });
  }
});

在此示例中,我们使用 getApp() 方法获取应用实例,并调用其上的 eventEmitter 属性,通过 .on() 方法监听事件 notifyChange,并接收传递的通知列表,从而实现通知列表的实时更新。

3. 在需要触发通知的页面或组件中调用相关方法

在需要触发通知的页面或组件中,调用 NotifyService 的相关方法,从而向其他组件传递消息,例如:

Page({
  onTap: function() {
    var notify = {
      id: new Date().getTime(),
      content: '您收到一条新的通知',
      time: new Date()
    };
    NotifyService.addNotify(notify);
  }
});

此示例中,我们在 onTap 方法中创建了一个新的通知并调用 NotifyServiceaddNotify 方法,从而向其他组件传递新的通知信息。

通过上述方法,我们可以实现小程序中的消息通知功能,同时我们还需要注意设计模式的合理运用和应用的具体场景及其灵活度,以达到良好的效果。

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

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

相关文章

网络通信IO模型-BIO

承接上文网络通信IO模型上 BIO的Java代码 服务端创建一个ServerSocket,绑定了端口号8090,目的是让客户端和服务端建立连接后进行通信,然后进入死循环,死循环里面会调用server.accept得到一个socket客户端,打印客户端的…

【PyQt5】指示灯显示

【PyQt5】指示灯显示 1、背景2、代码示例3、QtDesigner绘制 1、背景 利用Qt5写工业控制软件交互界面的时候,经常需要在界面上有指示灯功能。 例如下面的明暗表示串行端口的连接和断开。 我们本质是用Qt5的label文本标签来实现的,即通过设置标签的样式表…

115.删除有序数组中的重复项 removeDuplicatesFromSortedArray

文章目录 题目描述解题思路代码详解运行截图 题目描述 题目链接 给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元…

C# | 凸包算法之Jarvis,寻找一组点的边界/轮廓

C#实现凸包算法之Jarvis 文章目录 C#实现凸包算法之Jarvis前言示例代码实现思路测试结果结束语 前言 这篇关于凸包算法的文章,本文使用C#和Jarvis算法来实现凸包算法。 首先消除两个最基本的问题: 什么是凸包呢? 凸包是一个包围一组点的凸多…

驱动LSM6DS3TR-C实现高效运动检测与数据采集(1)----获取ID

概述 本文将介绍如何驱动和利用LSM6DS3TR-C传感器,实现精确的运动感应功能。LSM6DS3TR-C是一款先进的6轴惯性测量单元(IMU),集成了三轴加速度计和三轴陀螺仪,可用于测量和检测设备的加速度、姿态和运动。 本文将提供L…

车载软件架构 —— 闲聊几句AUTOSAR OS(二)

我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 在最艰难的时候,自己就别去幻想太远的将来,只要鼓励自己过好今天就行了! 这世间有太多的猝不及防,有些东西根本不配占有自己的情绪,人生就是一场体验,…

牛客HJ43迷宫问题 - 创建智能体通过策略自己找路

文章目录 问题描述思路代码C 问题描述 描述 定义一个二维数组 N*M ,如 5 5 数组下所示: int maze[5][5] { 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, }; 它表示一个迷宫,其中的1表示墙壁&#xff0…

SPA首屏加载速度慢的怎么解决?

SPA首屏加载速度慢的怎么解决? 加载慢的原因 网络延时问题资源文件体积是否过大资源是否重复发送请求去加载了加载脚本的时候,渲染内容堵塞了 解决方案 1.减小入口文件体积 常用的手段是路由懒加载,把不同路由对应的组件分割成不同的代码…

如何在华为OD机试中获得满分?Java实现【水仙花数】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 所谓水仙花数,是指一个…

LeetCode高频算法刷题记录10

文章目录 1. 旋转图像【中等】1.1 题目描述1.2 解题思路1.3 代码实现 2. 组合总和【中等】2.1 题目描述2.2 解题思路2.3 代码实现 3. 回文链表【简单】3.1 题目描述3.2 解题思路3.3 代码实现 4. 字符串解码【中等】4.1 题目描述4.2 解题思路4.3 代码实现 5. 多数元素【简单】5.…

高压功率放大器ATA4014VS高压功率放大器HSA42014

高压功率放大器ATA4014VS高压功率放大器HSA42014 一、企业背景: Aigtek是一家来自中国的专业从事测量仪器研发、生产和销售的高科技企业。公司主要研发和生产功率放大器、功率放大器模块、功率信号源、计量校准源等产品。核心团队主要是来自西安交通大学及西北工业大…

ERP系统介绍

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ERP系统概述?1.什么是ERP2.主流ERP系统介绍3.用友ERP4.部署用友ERP畅捷通T6软件系统环境要求4.用友ERP畅捷通T6软件用户管理4.用友ERP畅捷通T6软…

简单的UDP网络程序

目录 准备工作 makefile udpServer.hpp udpServer.cc 细节1 服务端部署 创建套接字 接口认识1 socket 协议家族 绑定套接字 认识接口2 bind sockaddr_in结构体类型 细节2 bzero inet_addr 服务器启动(初启动) udpServer.hpp udpServer.cc 细节3 本地回环通…

跑通NeRF-SLAM代码记录

前言 Install 原文章github链接 下载代码 git clone https://github.com/ToniRV/NeRF-SLAM.git --recurse-submodules git submodule update --init --recursive因为有相关依赖,所以尽量使用命令下载代码。 2. 新建nerf-slam环境,github上也没提到p…

从sftp下载大文件到浏览器

从sftp下载大文件到浏览器 问题方案相关依赖包相关代码片段(后端)文件信息缓存工具类-FileChunkCache文件信息对象-FileDetailsftp传输进度监控-FileProgressMonitor切片工具类-ChunkService文件下载服务-AsyncDownloadService 问题 近期遇到直接使用sf…

Dubbo与SpringBoot整合

1.注意starter版本适配 2.服务提供者 创建Maven项目 boot-user-service-provider 服务提供者 2.1.通用模块依旧照用 2.2.POM <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</a…

如何在华为OD机试中获得满分?Java实现【IPv4地址转换成整数】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 存在一种虚拟 IPv4<

本地创建的项目托管到git

本地创建的项目托管到git 这里的情况是本地先通过命令在电脑上指定文件夹创建好项目后&#xff0c;需要托管到git上&#xff0c;这里以gitee为例 打开gitee&#xff0c;登录滑动到右上方&#xff0b;&#xff0c;点击新建仓库&#xff0c;跳转到新建仓库页面 填写仓库信息&am…

Ubuntu18.04+RTX3060+TensorFlow2.12.0(GPU版)+Cuda11.1+CuDNN8.6.0安装

前情提要 可以跳过 我在Ubuntu18.04上安装了pytorch的相关环境&#xff0c;配置如图。 Ubuntu18.04RTX3060显卡配置pytorch、cuda、cudnn和miniconda_Toblerone_Wind的博客-CSDN博客之前已经安装成功了&#xff0c;也发了篇博客梳理了整套流程如下。ubuntu18.04安装pytorch、c…

回归预测 | MATLAB实现实现FOA-BP果蝇算法优化BP神经网络多变量输入回归预测模型

回归预测 | MATLAB实现实现FOA-BP果蝇算法优化BP神经网络多变量输入回归预测模型 目录 回归预测 | MATLAB实现实现FOA-BP果蝇算法优化BP神经网络多变量输入回归预测模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 果蝇算法(FOA)优化BP神经网络回归预测,FOA-BP回归预测…