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


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对文章内容进行分页示例代码
Mar 05 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
浅谈javascript原型链与继承
Jul 13 Javascript
ionic隐藏tabs的方法
Aug 29 Javascript
Angular2+如何去除url中的#号详解
Dec 20 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 Javascript
Vue slot用法(小结)
Oct 22 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
浅谈Vue项目骨架屏注入实践
Aug 05 Javascript
防止Layui form表单重复提交的实现方法
Sep 10 Javascript
Vue.js watch监视属性知识点总结
Nov 11 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语言认识上需要避免的10大误区
2014/06/12 PHP
thinkphp中memcache的用法实例
2014/11/29 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
jQuery为iframe的body添加click事件的实现代码
2011/04/07 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
jquery根据name属性查找的小例子
2013/11/21 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
Python fileinput模块使用介绍
2014/11/30 Python
Python Flask-web表单使用详解
2017/11/18 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
中科前程Java笔试题
2016/11/20 面试题
升职自荐书范文
2013/11/28 职场文书
翻译学院毕业生自荐书
2014/02/02 职场文书
宾馆总经理岗位职责
2014/02/14 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
小学生开学感言
2014/02/28 职场文书
行政办公室岗位职责
2014/03/18 职场文书
2015年社区环境卫生工作总结
2015/04/21 职场文书
我的中国梦主题教育活动总结
2015/05/07 职场文书
小学毕业感言200字
2015/07/30 职场文书
手把手教你从零开始react+antd搭建项目
2021/06/03 Javascript