微信小程序中实现一对多发消息详解及实例代码


Posted in Javascript onFebruary 14, 2017

微信小程序中实现一对多发消息详解及实例代码

微信小程序中各个界面之间的传值和通知比较蛋疼。所以模仿了iOS中的通知中心,在微信小程序中写了一套类似的通知中心。

通知中心可以做到:1对多发消息,传递object。使用十分简洁。

使用时,在需要接收消息的界面注册一个通知名。然后在需要发消息的界面post这个通知名就可以了。可以在多个界面注册同一个通知名。这样就可以1对多发消息。

使用方法:

1:在app.js中引用notification.js

var notificationCenter = require('/utils/notification.js'); //这里请改为你的绝对路径

2:在app.js中添加:

App({
  onLaunch: function (){
     this.notificationCenter = notificationCenter.center();
  },
  notificationCenter:null,
})

3: 接收通知的page.js中注册

PageA.js:

var app = getApp();
Page({
 onLoad:function(options){
 app.notificationCenter.register("一个通知名称",this,"didReceviceAnyNotification");
 },
 didReceviceAnyNotification:function(name,content){
  console.log("接收到了通知:",name, content);
 },
})

4: 发出通知的page.js中

PageB.js 任意函数

var app = getApp();
Page({
 anyFunction:function(){
  app.notificationCenter.post("通知名称",{
    //任意通知object
  })  ;
 },
})

实现:

文件下载:http://xiazai.3water.com/201702/yuanma/wxappNotificationCenter-master(3water.com).rar

var notificationCenter = {

notificationCenter:{},

// 向通知中心注册一个监听者。
// name: 监听的通知名称
// observer: 监听者
// action: 监听者收通知时调用的方法名,
// func: 监听者收到通知时调用的函数,
// action func 2选1
register:function(name,observer,action,func){
  if (!name || !observer) return;
  if (!action && !func) return;

  console.log("注册通知:",name,observer);

  var center = this.notificationCenter;
  var objects = center[name];
  if (!objects){
    objects = [];
  }
  this.remove(name,observer);
  objects.push({
    observer:observer,
    action:action,
    func:func
  });
  center[name] = objects;
},
// 从通知中心移除一个监听者
remove:function(name,observer){
  if (!name || !observer) return;

  var center = this.notificationCenter;
  var objects = center[name];
  if (!objects){
    return;
  }

  var idx;
  var object;
  for(idx = 0;idx<objects.length;idx++){
    var obj = objects[idx];
    if (obj.observer == observer){
    object = obj;
    break;
    }
  }
  if (object){
    objects.splice(idx,1);
  }
  center[name] = objects;
},
// 通过通知中心发出通知
// name: 通知名称
// notification: 通知内容
post:function(name,notification){
  if (!name) return;

  console.log("准备发出通知:",name,notification);

  var center = this.notificationCenter;
  var objects = center[name];
  if (!objects){
    objects = [];
  }
  objects.forEach(function(object){
    var observer = object.observer;
    var action = object.action;
    var func = object.func;

    if (observer && action){
      func = observer[action];
    }
    func(notification);
  });

  console.log("完成向 ",objects.length," 个监听者发出通知:",name);
}
}

function center(){
  return notificationCenter;
}

module.exports.center = center;

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
Jan 12 Javascript
jquery validator 插件增加日期比较方法
Feb 21 Javascript
Prototype源码浅析 Enumerable部分之each方法
Jan 16 Javascript
JavaScript设计模式之工厂方法模式介绍
Dec 28 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
JS中Array数组学习总结
Jan 18 Javascript
vue数字类型过滤器的示例代码
Sep 07 Javascript
angular.js4使用 RxJS 处理多个 Http 请求
Sep 23 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
Nov 22 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 jQuery
js实现复制粘贴的两种方法
Dec 04 Javascript
有关JS中的0,null,undefined,[],{},'''''''',false之间的关系
Feb 14 #Javascript
js基于myFocus实现轮播图效果
Feb 14 #Javascript
javascript 单例模式详解及简单实例
Feb 14 #Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 #Javascript
微信小程序 弹幕功能简单实例
Feb 14 #Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 #Javascript
微信小程序 Nginx环境配置详细介绍
Feb 14 #Javascript
You might like
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
php教程 插件机制在PHP中实现方案
2012/11/02 PHP
php魔术变量用法实例详解
2014/11/13 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
php opendir()列出目录下所有文件的实例代码
2016/10/02 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
JavaScript 编写匿名函数的几种方法
2010/02/21 Javascript
js创建数据共享接口——简化框架之间相互传值
2011/10/23 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
javaScript函数中执行C#代码中的函数方法总结
2013/08/07 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
举例讲解JavaScript中将数组元素转换为字符串的方法
2015/10/25 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
python实现单链表的方法示例
2019/09/03 Python
Python类中的装饰器在当前类中的声明与调用详解
2020/04/15 Python
Python结合Window计划任务监测邮件的示例代码
2020/08/05 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
高中生自我鉴定范文
2013/10/30 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
男女朋友协议书
2014/04/23 职场文书
消防安全宣传标语
2014/06/07 职场文书
大学生党员个人剖析材料
2014/10/08 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
python自动化测试通过日志3分钟定位bug
2021/11/20 Python
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL