微信小程序中实现一对多发消息

作者: wwwbbat | 来源:发表于2017-01-11 13:17 被阅读808次

    微信小程序中各个界面之间的传值和通知比较蛋疼。所以模仿了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(notification){
        console.log("接收到了通知:",notification);
    
        var _this = notification._this; //不要直接使用 this
        var name = notification.name;
      },
    })
    

    4: 发出通知的page.js中
    PageB.js 任意函数

    var app = getApp();
    Page({
      anyFunction:function(){
        app.notificationCenter.post("通知名称",{
            //任意通知object
        })   ;
      },
    })
    

    实现: github: https://github.com/developforapple/wxappNotificationCenter
    notification.js

    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;

    相关文章

      网友评论

      • 知晓程序:你好!我们是爱范儿旗下专注于小程序生态的公众号知晓程序(微信号 zxcx0101)。我们很赞赏你的文章,希望能获得转载授权。授权后,你的文章将会在知晓程序社区(minapp.com)、爱范儿、AppSo 等渠道发布,我们会注明来源和作者姓名。
        知晓程序:@Voyager3 感谢~

      本文标题:微信小程序中实现一对多发消息

      本文链接:https://www.haomeiwen.com/subject/yzqrbttx.html