首页 > 其他 > 详细

利用观察者模式 进行不同页面的传值

时间:2019-05-31 16:04:46      阅读:122      评论:0      收藏:0      [点我收藏+]
const eventMap = {};

//监听事件
//$on(事件名字, 回调函数1)
//$on(事件名字, 回调函数2)
const $on = function(eventName, eventCallback){
    //判断事件是否有对应的装载事件回调的容器
    if(!eventMap[eventName]){
        eventMap[eventName] = [];//没有就创建
    }
    //将事件回调缓存在容器中
    eventMap[eventName].push(eventCallback);

}


//触发事件
//$emit(事件名字, 传递的参数);
const $emit = function(eventName, params){
//$emit = function(eventName, ...rest){
    //取得事件所对应的所有回调方法
    let eventList = eventMap[eventName];
    if(!eventList)
        return;
    //遍历所有回调方法
    eventList.map(cb=>{
        cb(params);
//        cb(...rest);
    })
}


//移除事件
//$off(eventName);//移除所有监听
//$off(eventName, callback);//移除指定监听
const $off = function(eventName, callback){
    //取得事件所对应的所有回调
    let eventList = eventMap[eventName];
    if(!callback){
        //移除所有监听
        eventMap[eventName] = null;
    }else{
        //移除指定监听
        eventMap[eventName] = eventList.filter(cb=>{
            //判断事件是否是需要移除的
            return cb != callback
        })
    }
}

export default {
    $on,
    $emit,
    $off
}
import observer from ‘../../utils/observer.js‘

observer.$on(‘calibrationVal‘, (openId) => {
      // 获取最近一次检测数据
      this.getLatelyData(openId)
      // 获取最近三天检测数据
      this.getThreeData(openId)
    })
import observer from ‘../../utils/observer.js‘

//反向传值
          //触发home监听的事件
          observer.$emit(‘calibrationVal‘, this.data.openId);
          wx.navigateBack({
          });

 

利用观察者模式 进行不同页面的传值

原文:https://www.cnblogs.com/yangzhenhong/p/10955549.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!