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


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 数组操作代码集锦
Apr 28 Javascript
JS 自动完成 AutoComplete(Ajax 查询)
Jul 07 Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
javascript循环变量注册dom事件 之强大的闭包
Sep 08 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
js 判断上传文件大小及格式代码
Nov 13 Javascript
JsRender for index循环索引用法详解
Oct 31 Javascript
浅谈vue 单文件探索
Sep 05 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
Jul 04 Javascript
vue服务端渲染操作简单入门实例分析
Aug 28 Javascript
element中Steps步骤条和Tabs标签页关联的解决
Dec 08 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不写闭合标签的好处
2014/03/04 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
javascript之AJAX框架使用说明
2010/04/24 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
JavaScript基础篇(6)之函数表达式闭包
2015/12/11 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
2017/05/24 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
详解Vue.js3.0 组件是如何渲染为DOM的
2020/11/10 Javascript
如何在Python中编写并发程序
2016/02/27 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
100行python代码实现跳一跳辅助程序
2018/01/15 Python
python获取代理IP的实例分享
2018/05/07 Python
python实现黑客字幕雨效果
2018/06/21 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python tornado修改log输出方式
2019/11/18 Python
Keras 切换后端方式(Theano和TensorFlow)
2020/06/19 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
HTML5使用drawImage()方法绘制图像
2014/06/23 HTML / CSS
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
爱普生美国官网:Epson美国
2018/11/05 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
专科毕业生学习生活的自我评价
2013/10/26 职场文书
中学教师请假制度
2014/02/03 职场文书
理发店策划方案
2014/06/05 职场文书
敬老月活动总结
2014/08/28 职场文书
逃课检讨书
2015/01/26 职场文书
董事会决议范本
2015/07/01 职场文书