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


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 相关文章推荐
js动态给table添加/删除tr的方法
Aug 02 Javascript
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
JavaScript操作cookie类实例
Mar 31 Javascript
jQuery UI设置固定日期选择特效代码分享
Aug 27 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
Apr 18 Javascript
简单实现IONIC购物车功能
Jan 10 Javascript
JavaScript实现各种排序的代码详解
Aug 28 Javascript
Angular4学习教程之HTML属性绑定的方法
Jan 04 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
微信小程序canvas开发水果老虎机的思路详解
Feb 07 Javascript
微信小程序整个页面的自动适应布局的实现
Jul 12 Javascript
javascript函数式编程基础
Sep 15 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应用提速面面观
2006/10/09 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP cdata 处理(详细介绍)
2013/07/05 PHP
php 伪静态之IIS篇
2014/06/02 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
使用phpstorm和xdebug实现远程调试的方法
2015/12/29 PHP
PHP实现电商订单自动确认收货redis队列
2017/05/17 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
Vue Ajax跨域请求实例详解
2017/06/20 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
详解Vue中watch的详细用法
2018/11/28 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
python进阶教程之函数参数的多种传递方法
2014/08/30 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
pyqt5的QComboBox 使用模板的具体方法
2018/09/06 Python
Python中GIL的使用详解
2018/10/03 Python
python实现移位加密和解密
2019/03/22 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
中专生自我鉴定
2013/12/17 职场文书
初一家长会邀请函
2014/01/31 职场文书
民族团结先进个人材料
2014/02/05 职场文书
本科应届生求职信
2014/08/05 职场文书
无犯罪记录证明
2014/09/19 职场文书
2015年国庆节标语大全
2015/07/30 职场文书
交通安全教育主题班会
2015/08/12 职场文书