Molecule Framework -EditorService API 详细文档

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: 标签页 ID
  • groupId: 编辑器组 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: 要更新的编辑器组 ID
  • groupValues: 要更新的组属性值(不包含 id 属性)

updateCurrentGroup

更新当前编辑器组。

typescript 复制代码
updateCurrentGroup(currentValues: Partial<IEditorGroup>): void

参数:

  • currentValues: 要更新的组属性值(部分属性)

setActive

设置活动的编辑器组和标签页。

typescript 复制代码
setActive(groupId: UniqueId, tabId: UniqueId): void

参数:

  • groupId: 目标编辑器组 ID
  • tabId: 目标标签页 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 编辑器实例类型
相关推荐
Anita_Sun2 小时前
😋 核心原理篇:线程池的 5 大核心组件
前端·node.js
灼华_2 小时前
Web前端移动端开发常见问题及解决方案(完整版)
前端
_请输入用户名2 小时前
Vue3 Patch 全过程
前端·vue.js
孟祥_成都2 小时前
nest.js / hono.js 一起学!字节团队如何配置多环境攻略!
前端·node.js
用户4099322502122 小时前
Vue3数组语法如何高效处理动态类名的复杂组合与条件判断?
前端·ai编程·trae
山里看瓜2 小时前
解决 iOS 上 Swiper 滑动图片闪烁问题:原因分析与最有效的修复方式
前端·css·ios
Java水解2 小时前
前端与 Spring Boot 后端无感 Token 刷新 - 从原理到全栈实践
前端·后端
软件技术NINI2 小时前
前端怎么学
前端
O***p6042 小时前
前端体验的下一次革命:从页面导航到“流式体验”的系统化重构
前端·重构