import { Injectable } from '@angular/core'; import { Subject, BehaviorSubject } from 'rxjs'; interface ViewItems { items: Array; } interface viewContainer { [viewGroupIdId: string]: ViewItems; } @Injectable() export class ViewChangeService { /**默认视图切换分组名称 */ private readonly defaultId:string = 'default'; //当前显示视图 currentViewType:any = {}; /**contents */ viewContainers:viewContainer = {}; changeCurrentViewId: BehaviorSubject = new BehaviorSubject(null); constructor() { } /** * 添加视图项目 * @param itemId * @param viewContainerId */ addViewItem(itemId:string, viewContainerId = this.defaultId){ if(this.viewContainers[viewContainerId]){ if (this.hasElement(itemId, viewContainerId)) { return; } else{ this.viewContainers[viewContainerId].items.push(itemId); } } else{ this.viewContainers[viewContainerId] = { items: [] } as ViewItems; this.viewContainers[viewContainerId].items.push(itemId); } } removeViewItem(itemId, viewContainerId = this.defaultId){ delete this.viewContainers[viewContainerId]; if(this.viewContainers && this.viewContainers[viewContainerId]){ const items = this.viewContainers[viewContainerId].items.filter(el=>{ return el !== itemId; }) if (!items.length) { delete this.viewContainers[viewContainerId]; return; } this.viewContainers[viewContainerId].items = items; } } /**存储currentpageid */ updateCurrentViewId(type:string, viewContainerId = this.defaultId){ this.currentViewType[viewContainerId] = type ; let changeView={}; changeView[viewContainerId]=type; this.changeCurrentViewId.next(changeView); } getChangeCurrentViewId(){ return this.changeCurrentViewId; } private hasElement(itemId: string, groupId: string): boolean { return this.viewContainers[groupId].items.some((item): boolean => item === itemId); } }