Editor
Editor 是 EasyEditor 的核心引擎,负责管理整个编辑器的生命周期、插件系统、事件处理和核心模块的协调。它提供了一套完整的上下文管理机制,使各个模块之间能够进行有效通信和协作。
Overview
ts
import { createEasyEditor } from '@easyeditor/core';
// 创建编辑器实例
const editor = createEasyEditor({
// 配置选项
plugins: [], // 插件列表
setters: {}, // setter 列表
components: {}, // 组件列表
componentMetas: {}, // 组件元数据列表
lifeCycles: {}, // 生命周期钩子
hotkeys: [], // 快捷键配置
defaultSchema: {} // 默认 schema
});
plugins
- 类型:
Plugin[]
编辑器插件列表。
ts
import ExamplePlugin from './plugins/example-plugin';
import CustomPlugin from './plugins/custom-plugin';
const editor = createEasyEditor({
plugins: [ExamplePlugin(), CustomPlugin()]
});
setters
- 类型:
Record<string, Component | Setter>
编辑器 Setter 列表,用于属性面板。
ts
import StringSetter from './setters/string-setter';
import SelectSetter from './setters/select-setter';
const editor = createEasyEditor({
setters: {
StringSetter,
SelectSetter
}
});
components
- 类型:
Record<string, Component>
编辑器组件列表。
ts
import Button from './components/button';
import Input from './components/input';
const editor = createEasyEditor({
components: {
Button,
Input
}
});
componentMetas
- 类型:
Record<string, ComponentMetadata>
组件元数据列表。
ts
const editor = createEasyEditor({
componentMetas: {
Button: {
componentName: 'Button',
title: '按钮',
props: [
{
name: 'text',
title: '文本',
setter: 'StringSetter'
}
]
}
}
});
lifeCycles
- 类型:
LifeCyclesConfig
编辑器生命周期钩子。
ts
const editor = createEasyEditor({
lifeCycles: {
init: (editor) => {
console.log('编辑器初始化');
},
destroy: (editor) => {
console.log('编辑器销毁');
},
extend: (editor) => {
console.log('编辑器扩展');
}
}
});
designer
- 类型:
Pick<DesignerProps, 'onDragstart' | 'onDrag' | 'onDragend'>
Designer 的配置选项。
ts
const editor = createEasyEditor({
designer: {
onDragstart: (e) => {
console.log('拖拽开始', e);
},
onDrag: (e) => {
console.log('拖拽中', e);
},
onDragend: (e) => {
console.log('拖拽结束', e);
}
}
});
hotkeys
- 类型:
HotkeyConfig[]
编辑器快捷键配置。
ts
const editor = createEasyEditor({
hotkeys: [
{
key: 'ctrl+s',
callback: (e) => {
e.preventDefault();
console.log('保存操作');
}
},
{
key: 'ctrl+z',
callback: (e) => {
e.preventDefault();
console.log('撤销操作');
}
}
]
});
defaultSchema
- 类型:
ProjectSchema
- 默认值:
{ version: '0.0.1', componentsTree: [], }
编辑器默认 schema。
ts
const editor = createEasyEditor({
defaultSchema: {
componentName: "Page",
props: {
title: "新页面"
},
children: []
}
});
get
- 类型:
get<T = undefined, KeyOrType extends EditorValueKey = any>(keyOrType: KeyOrType): EditorGetResult<T, KeyOrType> | undefined
- 参数:
keyOrType
: 要获取的值的 key 或类型
从编辑器上下文中获取指定 key 的值
ts
// 获取设计器实例
const designer = editor.get('designer');
// 使用类型获取
const project = editor.get<Project>('project');
set
- 类型:
set(key: EditorValueKey, data: any): void | Promise
- 参数:
key
: 要设置的值的 keydata
: 要设置的值
设置编辑器上下文中指定 key 的值
ts
// 设置自定义数据
editor.set('customData', { value: 'test' });
has
- 类型:
has(keyOrType: EditorValueKey): boolean
- 参数:
keyOrType
: 要检查的值的 key 或类型
检查编辑器上下文中是否存在指定 key 的值
ts
// 检查是否存在设计器实例
if (editor.has('designer')) {
console.log('设计器已初始化');
}
onceGot
- 类型:
onceGot<T = undefined, KeyOrType extends EditorValueKey = any>(keyOrType: KeyOrType): Promise<EditorGetResult<T, KeyOrType>>
- 参数:
keyOrType
: 要获取的值的 key 或类型
获取指定 key 的值,如果当前不存在则等待直到该值被设置
ts
// 等待设计器实例
const designer = await editor.onceGot('designer');
// 等待项目实例,并指定类型
const project = await editor.onceGot<Project>('project');
onGot
- 类型:
onGot<T = undefined, KeyOrType extends EditorValueKey = any>(keyOrType: KeyOrType, fn: (data: EditorGetResult<T, KeyOrType>) => void): () => void
- 参数:
keyOrType
: 要监听的值的 key 或类型fn
: 当值存在或被设置时调用的回调函数
监听指定 key 的值,当值存在或被设置时调用回调函数
ts
// 监听设计器实例
const dispose = editor.onGot('designer', (designer) => {
console.log('设计器已就绪:', designer);
});
// 取消监听
dispose();
onChange
- 类型:
onChange<T = undefined, KeyOrType extends EditorValueKey = any>(keyOrType: KeyOrType, fn: (data: EditorGetResult<T, KeyOrType>) => void): () => void
- 参数:
keyOrType
: 要监听的值的 key 或类型fn
: 当值变化时调用的回调函数
监听指定 key 的值变化,当值变化时调用回调函数
ts
// 监听设计器实例变化
const dispose = editor.onChange('designer', (designer) => {
console.log('设计器已更新:', designer);
});
// 取消监听
dispose();
init
- 类型:
init(config?: EditorConfig): Promise
- 参数:
config
: 可选,编辑器配置
初始化编辑器
ts
// 初始化编辑器
await editor.init({
plugins: [MyPlugin()],
components: myComponents
});
destroy
- 类型:
destroy(): void
销毁编辑器,清理资源
ts
// 销毁编辑器
editor.destroy();
extend
- 类型:
extend(pluginManager: PluginManager): Promise
- 参数:
pluginManager
: 插件管理器实例
扩展编辑器,执行插件的 extend 方法
ts
// 通常在内部使用,不需要手动调用
const pluginManager = editor.get('pluginManager');
await editor.extend(pluginManager);
onBeforeInit
- 类型:
onBeforeInit(listener: (editor: Editor) => void): () => void
- 参数:
listener
: 事件监听器
监听编辑器初始化前事件
ts
// 监听编辑器初始化前事件
const dispose = editor.onBeforeInit((editor) => {
console.log('编辑器即将初始化');
});
// 取消监听
dispose();
onAfterInit
- 类型:
onAfterInit(listener: (editor: Editor) => void): () => void
- 参数:
listener
: 事件监听器
监听编辑器初始化后事件
ts
// 监听编辑器初始化后事件
const dispose = editor.onAfterInit((editor) => {
console.log('编辑器已初始化完成');
});
// 取消监听
dispose();
onDestroy
- 类型:
onDestroy(listener: (editor: Editor) => void): () => void
- 参数:
listener
: 事件监听器
监听编辑器销毁事件
ts
// 监听编辑器销毁事件
const dispose = editor.onDestroy((editor) => {
console.log('编辑器已销毁');
});
// 取消监听
dispose();
onBeforeExtend
- 类型:
onBeforeExtend(listener: (editor: Editor) => void): () => void
- 参数:
listener
: 事件监听器
监听编辑器扩展前事件
ts
// 监听编辑器扩展前事件
const dispose = editor.onBeforeExtend((editor) => {
console.log('编辑器即将扩展');
});
// 取消监听
dispose();
onAfterExtend
- 类型:
onAfterExtend(listener: (editor: Editor) => void): () => void
- 参数:
listener
: 事件监听器
监听编辑器扩展后事件
ts
// 监听编辑器扩展后事件
const dispose = editor.onAfterExtend((editor) => {
console.log('编辑器已扩展完成');
});
// 取消监听
dispose();