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


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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
jquery中输入验证中一个不错的效果
Aug 21 Javascript
JavaScript模块随意拖动示例代码
May 27 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
Aug 11 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
Sep 28 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
Dec 31 Javascript
avalonjs制作响应式瀑布流特效
May 06 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
zTree获取当前节点的下一级子节点数实例
Sep 05 Javascript
JS实现点击循环切换显示内容的方法
Oct 19 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
Aug 31 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中模拟POST传递数据的两种方法分享
2011/09/16 PHP
php提示undefined index的几种解决方法
2012/05/21 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
php获取从百度搜索进入网站的关键词的详细代码
2014/01/08 PHP
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
php Session无效分析资料整理
2016/11/29 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
Jquery 在页面加载后执行的几种方式
2014/03/14 Javascript
alert出数组中的随即值代码
2014/09/25 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
Postman无法正常返回结果问题解决
2020/08/28 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
Python中的高级数据结构详解
2015/03/27 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
python-str,list,set间的转换实例
2018/06/27 Python
pyftplib中文乱码问题解决方案
2020/01/11 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
Python下载网易云歌单歌曲的示例代码
2020/08/12 Python
linux面试题参考答案(6)
2016/06/23 面试题
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
思想汇报格式
2014/01/05 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
JavaScript实现外溢动态爱心的效果的示例代码
2022/03/21 Javascript
MySQL创建表操作命令分享
2022/03/25 MySQL
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
2022/07/07 Java/Android