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


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 相关文章推荐
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
Jan 09 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
Jun 05 Javascript
jcrop基本参数一览
Jul 16 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
fckeditor粘贴Word时弹出窗口取消的方法
Oct 30 Javascript
jQuery实现冻结表头的方法
Mar 09 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
Apr 06 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
Jan 04 Javascript
js仿百度音乐全选操作
Jan 13 Javascript
JavaScript设计模式之代理模式简单实例教程
Jul 03 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
Nov 15 Javascript
在Chrome DevTools中调试JavaScript的实现
Apr 07 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
Windows下利用Gvim写PHP产生中文乱码问题解决方法
2011/04/20 PHP
PHP 文件系统详解
2012/09/13 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
javascript 动态参数判空操作
2008/12/22 Javascript
jquery 可排列的表实现代码
2009/11/13 Javascript
laytpl 精致巧妙的JavaScript模板引擎
2014/08/29 Javascript
node.js中的querystring.unescape方法使用说明
2014/12/10 Javascript
在浏览器中实现图片粘贴的jQuery插件-- pasteimg使用指南
2014/12/29 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
JQuery animate动画应用示例
2019/05/14 jQuery
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
Python set集合类型操作总结
2014/11/07 Python
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
Python发送form-data请求及拼接form-data内容的方法
2016/03/05 Python
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
快速了解Python中的装饰器
2018/01/11 Python
python实现简单神经网络算法
2018/03/10 Python
Python定时任务sched模块用法示例
2018/07/16 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
上海天奕面试题笔试题
2015/04/19 面试题
什么叫做SQL注入,如何防止
2016/10/04 面试题
自我评价范文分享
2014/01/04 职场文书
社团活动总结怎么写
2014/06/30 职场文书
个人师德师风自我剖析材料
2014/09/29 职场文书
教师节横幅标语
2014/10/08 职场文书
2014年新教师工作总结
2014/11/08 职场文书
安徽导游词
2015/02/12 职场文书
辞职信怎么写
2015/02/27 职场文书
工作简历的自我评价
2019/05/16 职场文书
Python中super().__init__()测试以及理解
2021/12/06 Python