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


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 相关文章推荐
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
Feb 03 Javascript
JQuery select(下拉框)操作方法汇总
Apr 15 Javascript
基于jQuery滑动杆实现购买日期选择效果
Sep 15 Javascript
jQuery siblings()用法实例详解
Apr 26 Javascript
jQuery+Pdo编写login登陆界面
Aug 01 Javascript
ionic实现滑动的三种方式
Aug 27 Javascript
jQuery grep()方法详解及实例代码
Oct 30 Javascript
jQuery中绑定事件bind() on() live() one()的异同
Feb 23 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
详解react如何在组件中获取路由参数
Jun 15 Javascript
js贪心算法 钱币找零问题代码实例
Sep 11 Javascript
基于JavaScript或jQuery实现网站夜间/高亮模式
May 30 jQuery
有关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
JS与PHP向函数传递可变参数的区别实例代码
2011/05/18 PHP
实用PHP会员权限控制实现原理分析
2011/05/29 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
php微信公众平台配置接口开发程序
2016/09/22 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
JavaScript通过事件代理高亮显示表格行的方法
2015/05/27 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
2017/02/13 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
微信小程序 导入图标实现过程详解
2019/10/11 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
Python基于回溯法子集树模板实现8皇后问题
2017/09/01 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
html5 canvas绘制矩形和圆形的实例代码
2016/06/16 HTML / CSS
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
正隆泰信息技术有限公司上机题
2012/06/14 面试题
集团公司人力资源部岗位职责
2014/01/03 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
个人年底工作总结
2015/03/10 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
军训阅兵新闻稿
2015/07/17 职场文书
高中生综合素质评价范文
2015/08/18 职场文书
基于Python实现将列表数据生成折线图
2022/03/23 Python
vue使用localStorage持久性存储实现评论列表
2022/04/14 Vue.js