olympus-r
Version:
一个力求简单易用的前端开发框架 #### 开发语言 TypeScript #### 核心架构 MVC #### 模块间通讯和解耦 采用事件机制,利用一个全局唯一的事件派发器进行模块间通讯,解耦模块间依赖 #### 表现层结构 使用桥接模式拆分接口与实现,达到一套核心驱动多套表现层的目的(目前支持DOM、Egret、PixiJS三种表现层),同时支持表现层的未来可扩展性 #### TypeScript装饰器注入 框架提供TypeScript装饰器注入功能,便捷获取托管对象。例如:
92 lines (91 loc) • 3 kB
TypeScript
import IMediator from "../mediator/IMediator";
import IMediatorConstructor from "../mediator/IMediatorConstructor";
import { ModuleType } from "../mediator/Mediator";
/**
* @author Raykid
* @email initial_r@qq.com
* @create date 2017-09-14
* @modify date 2017-09-15
*
* 模块管理器,管理模块相关的所有操作。模块具有唯一性,同一时间不可以打开两个相同模块,如果打开则会退回到先前的模块处
*/
export default class ModuleManager {
private _moduleStack;
private _openCache;
private _opening;
private _busy;
/**
* 获取当前模块
*
* @readonly
* @type {IMediatorConstructor|undefined}
* @memberof ModuleManager
*/
readonly currentModule: IMediatorConstructor | undefined;
/**
* 获取当前模块的实例
*
* @readonly
* @type {(IMediator|undefined)}
* @memberof ModuleManager
*/
readonly currentModuleInstance: IMediator | undefined;
/**
* 获取活动模块数量
*
* @readonly
* @type {number}
* @memberof ModuleManager
*/
readonly activeCount: number;
/**
* 获取模块在栈中的索引
*
* @param {IMediatorConstructor} cls 模块类型
* @returns {number} 索引值
* @memberof ModuleManager
*/
getIndex(cls: IMediatorConstructor): number;
/**
* 获取索引处模块类型
*
* @param {number} index 模块索引值
* @returns {IMediatorConstructor} 模块类型
* @memberof ModuleManager
*/
getModule(index: number): IMediatorConstructor;
private getAfter;
private getCurrent;
/**
* 获取模块是否开启中
*
* @param {IMediatorConstructor} cls 要判断的模块类型
* @returns {boolean} 是否开启
* @memberof ModuleManager
*/
isOpened(cls: IMediatorConstructor): boolean;
private activateModule;
private deactivateModule;
/**
* 打开模块
*
* @param {ModuleType|string} clsOrName 模块类型或名称
* @param {*} [data] 参数
* @param {boolean} [replace=false] 是否替换当前模块
* @returns {Promise<IMediator>} 开启成功后返回被开启模块引用
* @memberof ModuleManager
*/
open(module: ModuleType | string, data?: any, replace?: boolean): Promise<IMediator>;
private onFinishOpen;
/**
* 关闭模块,只有关闭的是当前模块时才会触发onDeactivate和onActivate,否则只会触发close
*
* @param {ModuleType|string} clsOrName 模块类型或名称
* @param {*} [data] 参数
* @returns {Promise<IMediator>} 关闭成功后返回被关闭的模块引用
* @memberof ModuleManager
*/
close(module: ModuleType | string, data?: any): Promise<IMediator>;
}
/** 再额外导出一个单例 */
export declare const moduleManager: ModuleManager;