EditorService API 文档
概述
EditorService 是 Molecule 框架中用于管理编辑器标签页、编辑器组和编辑器实例的核心服务。它提供了完整的编辑器标签页生命周期管理、编辑器组操作以及事件监听功能。
接口定义
- 接口 :
IEditorService extends Component<IEditor> - 实现类 :
EditorService
标签页管理方法
open
在指定的编辑器组中打开一个新的标签页。
typescript
open<T = any>(tab: IEditorTab<T>, groupId?: UniqueId): void
参数:
tab: 标签页数据对象groupId: (可选)目标编辑器组 ID,如果不提供则在当前组中打开
说明 : 如果提供了 groupId,将在指定的组中打开标签页;否则在当前组中打开。
getTabById
通过标签页 ID 从指定组中获取标签页。
typescript
getTabById<T>(tabId: UniqueId, groupId: UniqueId): IEditorTab<T> | undefined
参数:
tabId: 标签页 IDgroupId: 编辑器组 ID
返回 : 找到的标签页对象,如果不存在则返回 undefined
updateTab
更新指定的标签页。如果提供了 groupId,则更新指定组中的标签页。
typescript
updateTab(tab: IEditorTab, groupId?: UniqueId): IEditorTab
参数:
tab: 要更新的标签页对象(必须包含id属性)groupId: (可选)编辑器组 ID
返回: 更新后的标签页对象
isOpened
判断指定的标签页是否已在编辑器视图中打开。
typescript
isOpened(tabId: UniqueId): boolean
参数:
tabId: 标签页 ID(必需)
返回 : 如果标签页已打开返回 true,否则返回 false
注意 : 实现类中还有一个重载版本,支持传入 filterGroups 参数来过滤特定的组。
closeTab
关闭编辑器组视图中指定的标签页。
typescript
closeTab(tabId: UniqueId, groupId: UniqueId): void
参数:
tabId: 要关闭的标签页 ID(必需)groupId: 编辑器组 ID(必需)
closeOther
关闭编辑器组中除指定标签页外的其他所有已打开的标签页。
typescript
closeOther(tab: IEditorTab, groupId: UniqueId): void
参数:
tab: 要保留的标签页对象(必须包含id属性)groupId: 编辑器组 ID(必需)
closeToRight
关闭编辑器组中指定标签页右侧的所有已打开标签页。
typescript
closeToRight(tab: IEditorTab, groupId: UniqueId): void
参数:
tab: 起始标签页对象(必须包含id属性),作为关闭操作的起点groupId: 编辑器组 ID(必需)
closeToLeft
关闭编辑器组中指定标签页左侧的所有已打开标签页。
typescript
closeToLeft(tab: IEditorTab, groupId: UniqueId): void
参数:
tab: 起始标签页对象(必须包含id属性),作为关闭操作的起点groupId: 编辑器组 ID(必需)
closeAll
关闭指定编辑器组中的所有已打开标签页。
typescript
closeAll(groupId: UniqueId): void
参数:
groupId: 编辑器组 ID(必需)
编辑器组管理方法
getGroupById
获取指定的编辑器组。
typescript
getGroupById(groupId: UniqueId): IEditorGroup | undefined
参数:
groupId: 编辑器组 ID(必需)
返回 : 找到的编辑器组对象,如果不存在则返回 undefined
getGroupIndexById
获取编辑器组的索引位置(实现类中的方法)。
typescript
getGroupIndexById(id: UniqueId): number
参数:
id: 编辑器组 ID
返回: 编辑器组在组列表中的索引
getGroupIdByTab
获取包含指定标签页的编辑器组 ID。
typescript
getGroupIdByTab(tabId: UniqueId): UniqueId | null
参数:
tabId: 标签页 ID
返回 : 编辑器组 ID,如果标签页不存在则返回 null
cloneGroup
克隆指定的编辑器组。如果未提供 groupId,则默认克隆当前组。
typescript
cloneGroup(groupId?: UniqueId): IEditorGroup
参数:
groupId: (可选)要克隆的编辑器组 ID
返回: 克隆后的新编辑器组对象
updateGroup
更新指定的编辑器组。
typescript
updateGroup(groupId: UniqueId, groupValues: Omit<IEditorGroup, 'id'>): void
参数:
groupId: 要更新的编辑器组 IDgroupValues: 要更新的组属性值(不包含id属性)
updateCurrentGroup
更新当前编辑器组。
typescript
updateCurrentGroup(currentValues: Partial<IEditorGroup>): void
参数:
currentValues: 要更新的组属性值(部分属性)
setActive
设置活动的编辑器组和标签页。
typescript
setActive(groupId: UniqueId, tabId: UniqueId): void
参数:
groupId: 目标编辑器组 IDtabId: 目标标签页 ID
编辑器内容管理
setGroupEditorValue
更新指定编辑器组中的编辑器内容。
typescript
setGroupEditorValue(group: IEditorGroup, value: string): void
参数:
group: 编辑器组对象(必须包含editorInstance属性)value: 要设置的内容字符串
编辑器配置方法
setEntry
指定 Workbench 的入口页面。
typescript
setEntry(component: JSX.Element): void
参数:
component: React 组件元素
注意 : 实现类中参数类型为 React.ReactNode
updateEditorOptions
更新编辑器选项配置。
typescript
updateEditorOptions(options: IEditorOptions): void
参数:
options: 编辑器选项对象
操作和菜单管理
setDefaultActions
设置创建新组时的默认操作。
typescript
setDefaultActions(actions: IEditorActionsProps[]): void
参数:
actions: 默认操作数组
getDefaultActions
获取默认的组操作。
typescript
getDefaultActions(): IEditorActionsProps[]
返回: 默认操作数组
setDefaultMenus
设置创建新组时的默认菜单。
typescript
setDefaultMenus(menus: IMenuItemProps[]): void
参数:
menus: 默认菜单项数组
getDefaultMenus
获取默认的组菜单。
typescript
getDefaultMenus(): IMenuItemProps[]
返回: 默认菜单项数组
updateActions
更新指定编辑器组中的操作。
typescript
updateActions(actions: IMenuItemProps[], groupId?: UniqueId): void
参数:
actions: 要更新的操作菜单项数组groupId: (可选)编辑器组 ID,如果不提供则更新当前组
属性
editorInstance
Monaco 编辑器实例(只读)。
typescript
readonly editorInstance: MonacoEditor.IStandaloneCodeEditor
说明: 提供对底层 Monaco 编辑器实例的直接访问。
事件监听器
所有事件监听器方法都用于注册回调函数,当相应事件发生时会被调用。
onOpenTab
监听标签页打开事件。
typescript
onOpenTab(callback: (tab: IEditorTab) => void): void
参数:
callback: 回调函数,接收打开的标签页对象作为参数
onUpdateTab
监听编辑器标签页变更事件。
typescript
onUpdateTab(callback: (tab: IEditorTab) => void): void
参数:
callback: 回调函数,接收更新后的标签页对象作为参数
onMoveTab
监听标签页移动事件。
typescript
onMoveTab(callback: (updateTabs: IEditorTab<any>[], groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收移动后的标签页数组和可选的组 ID 作为参数
onSelectTab
监听标签页选择事件。
typescript
onSelectTab(callback: (tabId: UniqueId, groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收选中的标签页 ID 和可选的组 ID 作为参数
onCloseTab
监听标签页关闭事件。
typescript
onCloseTab(callback: (tabId: UniqueId, groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收关闭的标签页 ID 和可选的组 ID 作为参数
onCloseAll
监听所有标签页关闭事件。
typescript
onCloseAll(callback: (groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收可选的组 ID 作为参数
onCloseOther
监听其他标签页关闭事件。
typescript
onCloseOther(callback: (tabItem: IEditorTab, groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收保留的标签页对象和可选的组 ID 作为参数
onCloseToLeft
监听左侧标签页关闭事件。
typescript
onCloseToLeft(callback: (tabItem: IEditorTab, groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收起始标签页对象和可选的组 ID 作为参数
onCloseToRight
监听右侧标签页关闭事件。
typescript
onCloseToRight(callback: (tabItem: IEditorTab, groupId?: UniqueId) => void): void
参数:
callback: 回调函数,接收起始标签页对象和可选的组 ID 作为参数
onActionsClick
监听编辑器组操作点击事件。
typescript
onActionsClick(callback: (menuId: UniqueId, currentGroup: IEditorGroup) => void): void
参数:
callback: 回调函数,接收被点击的菜单 ID 和当前编辑器组对象作为参数
onEditorInstanceMount
监听编辑器实例挂载事件。
typescript
onEditorInstanceMount(callback: (editorInstance: MonacoEditor.IStandaloneCodeEditor) => void): void
参数:
callback: 回调函数,接收挂载的 Monaco 编辑器实例作为参数
实现类内部方法
disposeModel
私有方法,用于释放模型资源。
typescript
private disposeModel
说明: 内部使用,用于清理编辑器模型。
依赖服务
EditorService 依赖于以下服务:
IExplorerService: 资源管理器服务ILayoutService: 布局服务
使用示例
打开标签页
typescript
import { molecule } from '@dtinsight/molecule';
const tab = {
id: 'tab-1',
name: 'example.ts',
data: { /* 自定义数据 */ }
};
// 在当前组中打开
molecule.editor.open(tab);
// 在指定组中打开
molecule.editor.open(tab, 'group-1');
监听标签页打开事件
typescript
molecule.editor.onOpenTab((tab) => {
console.log('标签页已打开:', tab.name);
});
关闭标签页
typescript
molecule.editor.closeTab('tab-1', 'group-1');
获取编辑器实例
typescript
const editor = molecule.editor.editorInstance;
// 使用 Monaco 编辑器 API
editor.setValue('Hello World');
类型定义引用
IEditor: 编辑器状态接口IEditorGroup: 编辑器组接口IEditorTab: 编辑器标签页接口IEditorActionsProps: 编辑器操作属性接口IEditorOptions: 编辑器选项接口IMenuItemProps: 菜单项属性接口UniqueId: 唯一标识符类型MonacoEditor.IStandaloneCodeEditor: Monaco 编辑器实例类型