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


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小数计算出现近似值的解决办法
Feb 06 Javascript
基于jQuery的js分页代码
Jun 10 Javascript
Array的push与unshift方法性能比较分析
Mar 05 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
如何实现移动端浏览器不显示 pc 端的广告
Oct 15 Javascript
JS常用算法实现代码
Nov 14 Javascript
angularjs的select使用及默认选中设置
Apr 08 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
小程序tab页无法传递参数的方法
Aug 03 Javascript
纯js实现无缝滚动功能代码实例
Feb 21 Javascript
vue中echarts的用法及与elementui-select的协同绑定操作
Nov 17 Vue.js
有关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代码(星期六,星期日总和)
2009/11/12 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
2014/05/04 PHP
php实现refresh刷新页面批量导入数据的方法
2014/12/23 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
Vue实现购物小球抛物线的方法实例
2020/11/22 Vue.js
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
详细介绍Python的鸭子类型
2016/09/12 Python
python中 chr unichr ord函数的实例详解
2017/08/06 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
ansible-playbook实现自动部署KVM及安装python3的详细教程
2020/05/11 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
世界最大域名注册商:GoDaddy
2016/07/24 全球购物
暑期实践思想汇报
2014/01/06 职场文书
军训教官感言
2014/03/02 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
购房协议书范本(无房产证)
2014/10/07 职场文书
离婚答辩状怎么写
2015/05/22 职场文书
心灵点滴观后感
2015/06/02 职场文书
分布式架构Redis中有哪些数据结构及底层实现原理
2022/03/13 Redis
Python中的turtle画箭头,矩形,五角星
2022/03/16 Python
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js