import { Injectable } from '@angular/core';import { Subject } from 'rxjs';@Injectable({ providedIn: 'root' })export class GlobalEvent {  /**存储事件上一次的value */  private _datas = {};  private _data$ = new Subject<EventInfo>();  private _dataFlow$ = this._data$.asObservable();  private _subscriptions: Map<GlEvenName, { [id: string]: Function[] }> = new Map();  constructor() {    this._dataFlow$.subscribe((data: EventInfo) => this._onEvent(data));  }  /**   * 告诉构造函数中的订阅触发事件   * @param 事件名   * @param 数据   */  notifyDataChanged<T>(event: GlEvenName, value: T) {    let current = this._datas[event];    if (current !== value) {      this._datas[event] = value;      this._data$.next({        event: event,        data: value      });    }  }  /**   * 订阅事件   * @param 事件名   * @param 回调函数id用于移除监听 举荐应用   * @param 回调函数   */  subscribe(event: GlEvenName, id: string = 'global', callback: Function) {    let subscriber = this._subscriptions.get(event) || Object.create(null);    let cbs = subscriber[id] = subscriber[id] || [];    cbs.push(callback);    this._subscriptions.set(event, subscriber);  }  /**  * 移除订阅事件  * @param 事件名  * @param 回调函数id用于移除  */  unsubscribe(event: GlEvenName, id: string = 'global') {    let subscriber = this._subscriptions.get(event) || Object.create(null);    delete subscriber[id]  }  /**触发事件回调函数 */  private _onEvent(evenInfo: EventInfo) {    let subscriber = this._subscriptions.get(evenInfo.event) || Object.create(null);    let data = evenInfo.data;    for (const key in subscriber) {      let cbs = subscriber[key] || [];      cbs.forEach(cb => {        cb.call(null, data)      })    }  }}type GlEvenName = keyof typeof ONNAME;/**事件名 和  数据 */interface EventInfo { event: GlEvenName, data: any };/**全局gl事件名称汇合,键值必须一样 必须在此处调用并写入GlEvenName */export const ONNAME = {  CHNGE: 'CHNGE',  GOOD: 'GOOD',}

应用办法就是在须要用到的组件中的构造函数中引入

import { GlobalEvent } from 'src/app/globalnew.state';constructor(   private gl$:GlobalEvent){}------this.gl$.notifyDataChanged('CHNGE','123456')

在须要订阅的组件中

import { GlobalEvent } from 'src/app/globalnew.state';constructor(   private gl$:GlobalEvent){}------this.gl$.subscribe('CHNGE','CHNGE',((item:any)=>{ console.log(item) //打印出'123456'}))this.gl$.unsubscribe('CHNGE','CHNGE');//勾销订阅