├── README.md └── notification.js /README.md: -------------------------------------------------------------------------------- 1 | # wxappNotificationCenter 2 | 在微信小程序中实现了一套类似于iOS通知中心的功能。做到1对多发消息,传值 3 | http://www.jianshu.com/p/c83211bd9cf0 4 | 5 | 6 | 微信小程序中各个界面之间的传值和通知比较蛋疼。所以模仿了iOS中的通知中心,在微信小程序中写了一套类似的通知中心。 7 | 8 | 通知中心可以做到:1对多发消息,传递object。使用十分简洁。 9 | 10 | 使用时,在需要接收消息的界面注册一个通知名。然后在需要发消息的界面post这个通知名就可以了。可以在多个界面注册同一个通知名。这样就可以1对多发消息。 11 | 12 | 使用方法: 13 | 14 | 1:在app.js中引用notification.js 15 | 16 |   var notificationCenter = require('/utils/notification.js'); //这里请改为你的绝对路径 17 | 18 | 2:在app.js中添加: 19 | 20 |   App({ 21 |     onLaunch: function (){ 22 |             this.notificationCenter = notificationCenter.center(); 23 |       }, 24 |       notificationCenter:null, 25 |   }) 26 | 27 | 28 | 3: 接收通知的page.js中注册 29 | PageA.js: 30 | 31 | var app = getApp(); 32 | Page({ 33 | onLoad:function(options){ 34 | app.notificationCenter.register("一个通知名称",this,"didReceviceAnyNotification"); 35 | }, 36 | didReceviceAnyNotification:function(notification){ 37 | console.log("接收到了通知:",notification); 38 | var _this = notification._this; //不要直接使用 this 39 | var name = notification.name; 40 | }, 41 | }) 42 | 43 | 44 | 4: 发出通知的page.js中 45 | PageB.js 任意函数 46 | 47 | var app = getApp(); 48 | Page({ 49 | anyFunction:function(){ 50 | app.notificationCenter.post("通知名称",{ 51 | //任意通知object 52 | }) ; 53 | }, 54 | }) 55 | -------------------------------------------------------------------------------- /notification.js: -------------------------------------------------------------------------------- 1 | 2 | var notificationCenter = { 3 | 4 | notificationCenter:{}, 5 | 6 | // 向通知中心注册一个监听者。 7 | // name: 监听的通知名称 8 | // observer: 监听者 9 | // action: 监听者收通知时调用的方法名, 10 | // func: 监听者收到通知时调用的函数, 11 | // action func 2选1 12 | register:function(name,observer,action,func){ 13 | if (!name || !observer) return; 14 | if (!action && !func) return; 15 | 16 | console.log("注册通知:",name,observer); 17 | 18 | var center = this.notificationCenter; 19 | var objects = center[name]; 20 | if (!objects){ 21 | objects = []; 22 | } 23 | this.remove(name,observer); 24 | objects.push({ 25 | observer:observer, 26 | action:action, 27 | func:func 28 | }); 29 | center[name] = objects; 30 | }, 31 | // 从通知中心移除一个监听者 32 | remove:function(name,observer){ 33 | if (!name || !observer) return; 34 | 35 | var center = this.notificationCenter; 36 | var objects = center[name]; 37 | if (!objects){ 38 | return; 39 | } 40 | 41 | var idx; 42 | var object; 43 | for(idx = 0;idx