0
点赞
收藏
分享

微信扫一扫

Vue 订阅模式

Go_Viola 2022-02-17 阅读 46

发布订阅模式: 订阅者(Subscriber)把自己想订阅的事件注册(Subscribe)到调度中心(Topic),当发布者(Publisher)发布该事件(Publish topic)到调度中心,也就是该事件触发时,由调度中心统一调度(Fire Event)订阅者注册到调度中心的处理代码。

比如很多人买了同一个股票,同花顺微信有触发预警发消息通知功能,如果很多人都买(订阅了)相同的股票,那么都会收到通知,下面是简单实现方法

//创建订阅事件
let event = {
  //创建一个数组用来放订阅的消息
  clientList: [],
  //监听函数
  listen(key, fn) {
    if (!this.clientList[key]) {
      this.clientList[key] = [];
    }
    this.clientList[key].push(fn); // 订阅的消息添加进缓存列表
  },
  //触发函数
  trigger(type, money) {
    if (!this.clientList[type] || this.clientList[type].length === 0) {
      // 如果没有绑定对应的消息直接返回
      return;
    }
    this.clientList[type].forEach((fn) => {
      fn.apply(this, [money]);
    });
  },
};
// 创建股票事件
let stockEvent = event;
// 小明订阅信息
stockEvent.listen("杭州银行", (price) => {
  console.log("小明,现在杭州银行股票价格是" + price);
});
// 小光订阅信息
stockEvent.listen("九安医疗", (price) => {
  console.log("小光,现在九安医疗股票价格是" + price);
});
// 小红订阅信息
stockEvent.listen("九安医疗", (price) => {
  console.log("小红,现在九安医疗股票价格是" + price);
});
// 小吴订阅信息
stockEvent.listen("东方财富", (price) => {
  console.log("小红,现在东方财富股票价格是" + price);
});

stockEvent.trigger("杭州银行", 11.73);
stockEvent.trigger("九安医疗", 88.88);
stockEvent.trigger("中国平安", 50.0);

在这里插入图片描述

举报

相关推荐

0 条评论