• 微信小程序一对多个页面间传递数据进行通信,事件触发的实现方法


    在有些场景下,使用组件间通信或者组件和页面间通信并不可行。比如我需要只有一个websocket实例,并且需要向多个页面传递我接收到的消息。

    下面的方法是一个页面向其它页面(触发事件)传递数据,其它页面也可以向这个页面传递数据。也就是可以互相传递。缺点是,这个页面必须曾经打开过。

    首先,在app.js中的onLaunch里这样定义:

    this.pages = {};

    假设有2个页面:

    a.js

    b.js

    分别在这2个js文件中onLoad事件中,写如下代码:

    app.pages[this.__route__] = this;

    分别在这2个js文件中,定义一个方法,用于接收收到的消息。比如我们可以这样写(communication 随便命名即可):

    1. communication(res){
    2. console.log(res)
    3. }

    如果你想从a.js里往b.js发数据(触发事件communication),那么在a.js里这样写:

    1. try{
    2. app.pages['pages/b/b'].communication("I am from a.js");
    3. }catch{
    4. console.log('b页面未打开过')
    5. }

    前面说过了,分别写接收消息的方法communication,那么

    在b.js里需要这样写:

    1. //在b.js里接收消息
    2. communication(content){
    3. console.log('in b.js,' + content)
    4. //再给a.js发一条消息
    5. try{
    6. app.pages['pages/a/a'].communication("I am from b.js");
    7. }catch(e){
    8. console.error("error in b.js " + e.message)
    9. }
    10. }

    上面的代码,因为在b.js里又给a.js发了一个消息,那么你要在a.js里也写一个communication方法(前面已经说过要在需要接收消息的js中分别写communication):

    在a.js里加几行代码,用于接收b.js发来的消息:

    1. communication(content){
    2. console.log('in a.js, ' + content)
    3. },

    多个页面同理。

  • 相关阅读:
    RabbitMQ消息队列——快速入门
    华为发布FTTR全光家庭星光F30系列新品,点亮家庭数字生活
    Apple硬件相关
    基于ssm停车管理系统毕业设计-附源码171046
    国家开放大学 模拟试题训练
    iOS开发:多线程之理解任务和队列
    Vue学习笔记-全局事件总线
    (PC+WAP)织梦模板娱乐新闻资讯类网站
    【笔试刷题训练】day_08
    乐观构思、悲观计划、乐观实行
  • 原文地址:https://blog.csdn.net/superfans98/article/details/133418771