定义 WxNotificationCenter.js 文件;
- /**
- * author: Di (微信小程序开发工程师)
- * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com)
- * 垂直微信小程序开发交流社区
- *
- * github地址: https://github.com/icindy/WxNotificationCenter
- *
- * for: 微信小程序通知广播模式类,降低小程序之间的耦合度
- * detail : http://weappdev.com/t/wxnotificationcenter/233
- */
- // 存放
- var __notices = [];
- var isDebug = true;
- /**
- * addNotification
- * 注册通知对象方法
- *
- * 参数:
- * name: 注册名,一般let在公共类中
- * selector: 对应的通知方法,接受到通知后进行的动作
- * observer: 注册对象,指Page对象
- */
- function addNotification(name, selector, observer) {
- if (name && selector) {
- if(!observer){
- // ("addNotification Warning: no observer will can't remove notice");
- }
- var newNotice = {
- name: name,
- selector: selector,
- observer: observer
- };
-
- addNotices(newNotice);
-
- } else {
-
- }
- }
-
- /**
- * 仅添加一次监听
- *
- * 参数:
- * name: 注册名,一般let在公共类中
- * selector: 对应的通知方法,接受到通知后进行的动作
- * observer: 注册对象,指Page对象
- */
- function addOnceNotification(name, selector, observer) {
- if (__notices.length > 0) {
- for (var i = 0; i < __notices.length; i++) {
- var notice = __notices[i];
- if (notice.name === name) {
- if (notice.observer === observer) {
- return;
- }
- }
- }
- }
- this.addNotification(name, selector, observer)
- }
-
- function addNotices(newNotice) {
- // if (__notices.length > 0) {
- // for (var i = 0; i < __notices.length; i++) {
- // var hisNotice = __notices[i];
- // //当名称一样时进行对比,如果不是同一个 则放入数组,否则跳出
- // if (newNotice.name === hisNotice.name) {
- // if (!cmp(hisNotice, newNotice)) {
- // __notices.push(newNotice);
- // }
- // return;
- // }else{
- // __notices.push(newNotice);
- // }
-
- // }
- // } else {
-
- // }
-
- __notices.push(newNotice);
- }
-
- /**
- * removeNotification
- * 移除通知方法
- *
- * 参数:
- * name: 已经注册了的通知
- * observer: 移除的通知所在的Page对象
- */
-
- function removeNotification(name,observer) {
- for (var i = 0; i < __notices.length; i++){
- var notice = __notices[i];
- if(notice.name === name){
- if(notice.observer === observer){
- __notices.splice(i,1);
- return;
- }
- }
- }
-
-
- }
-
- /**
- * postNotificationName
- * 发送通知方法
- *
- * 参数:
- * name: 已经注册了的通知
- * info: 携带的参数
- */
-
- function postNotificationName(name, info) {
- if(__notices.length == 0){
- return;
- }
-
- for (var i = 0; i < __notices.length; i++){
- var notice = __notices[i];
- if(notice.name === name){
- notice.selector(info);
- }
- }
-
- }
-
- // 用于对比两个对象是否相等
- function cmp(x, y) {
- // If both x and y are null or undefined and exactly the same
- if (x === y) {
- return true;
- }
-
- // If they are not strictly equal, they both need to be Objects
- if (! (x instanceof Object) || !(y instanceof Object)) {
- return false;
- }
-
- // They must have the exact same prototype chain, the closest we can do is
- // test the constructor.
- if (x.constructor !== y.constructor) {
- return false;
- }
-
- for (var p in x) {
- // Inherited properties were tested using x.constructor === y.constructor
- if (x.hasOwnProperty(p)) {
- // Allows comparing x[ p ] and y[ p ] when set to undefined
- if (!y.hasOwnProperty(p)) {
- return false;
- }
-
- // If they have the same strict value or identity then they are equal
- if (x[p] === y[p]) {
- continue;
- }
-
- // Numbers, Strings, Functions, Booleans must be strictly equal
- if (typeof(x[p]) !== "object") {
- return false;
- }
-
- // Objects and Arrays must be tested recursively
- if (!Object.equals(x[p], y[p])) {
- return false;
- }
- }
- }
-
- for (p in y) {
- // allows x[ p ] to be set to undefined
- if (y.hasOwnProperty(p) && !x.hasOwnProperty(p)) {
- return false;
- }
- }
- return true;
- };
-
- module.exports = {
- addNotification: addNotification,
- removeNotification: removeNotification,
- postNotificationName: postNotificationName,
- addOnceNotification: addOnceNotification
- }
在需要的页面js中引入该文件
- var WxNotificationCenter = require("../../utils/WxNotificationCenter.js");
-
- // 广播:
-
- WxNotificationCenter.postNotificationName('广播的名字', '');
-
- // 监听
-
- var that = this;
-
- WxNotificationCenter.addNotification('广播的名字', that.'要调用的方法' , that);