codeBlockService方法
写入历史栈的方法(setCodeDslById、setCodeDslByIdSync、deleteCodeDslByIds 等)的 options 支持 historyDescription / historySource,会透传到 historyService.pushCodeBlock 的 historyDescription / source 字段。
setCodeDsl
参数:
- {
CodeBlockDSL} codeDsl 代码块DSL
查看 CodeBlockDSL 及关联类型定义
tsexport interface CodeBlockDSL { [id: Id]: CodeBlockContent; }tsexport interface CodeBlockContent { /** 代码块名称 */ name: string; /** 代码块内容 */ content: ((...args: any[]) => any) | Function; /** 参数定义 */ params: CodeParam[] | []; /** 注释 */ desc?: string; /** 扩展字段 */ [propName: string]: any; }tsexport interface CodeParam { /** 参数名 */ name: string; /** 扩展字段 */ [propName: string]: any; }- {
返回:
{Promise<void>}
详情:
设置活动的代码块dsl数据源,并触发
code-dsl-change事件
getCodeDsl
返回:
- {
CodeBlockDSL| null}
- {
详情:
获取活动的代码块dsl数据源(默认从dsl中的codeBlocks字段读取)
getCodeContentById
参数:
{string | number}id 代码块id
返回:
- {
CodeBlockContent| null}
- {
详情:
根据代码块id获取代码块内容
setCodeDslById
扩展支持: 是
参数:
{string | number}id 代码块id- {Partial<
CodeBlockContent>} codeConfig 代码块内容配置信息 {Object}options 可选配置- {
ChangeRecord[]} changeRecords form 端变更记录,用于历史记录的精细化撤销/重做 {boolean}doNotPushHistory 是否不写入历史记录(默认 false){string}historyDescription 见 editorService 历史记录相关 options{HistoryOpSource}historySource 见 editorService 历史记录相关 options
- {
查看 ChangeRecord 类型定义
tsexport interface ChangeRecord { propPath?: string; value: any; }返回:
{Promise<void>}
详情:
设置代码块ID和代码内容到源dsl,强制写入;底层调用 setCodeDslByIdSync
setCodeDslByIdSync
参数:
{string | number}id 代码块id- {Partial<
CodeBlockContent>} codeConfig 代码块内容配置信息 {boolean}force 是否强制写入,默认true;为false时若同 id 已存在则跳过{Object}options 可选配置- {
ChangeRecord[]} changeRecords form 端变更记录,用于历史记录的精细化撤销/重做 {boolean}doNotPushHistory 是否不写入历史记录(默认 false){string}historyDescription 见 editorService 历史记录相关 options{HistoryOpSource}historySource 见 editorService 历史记录相关 options
- {
返回:
{void}
详情:
同步版本的 setCodeDslById,并会触发
addOrUpdate事件TIP
写入成功时(
force=false且同 id 已存在的跳过场景除外)会自动调用historyService.pushCodeBlock把本次变更入历史栈,参见 historyService.pushCodeBlock。 传入的changeRecords会一同写进 step,撤销/重做时调用方可据此按propPath局部回放。 传入doNotPushHistory: true可跳过写入历史栈,常用于批量导入、外部同步等非用户操作场景。
getCodeDslByIds
参数:
{string[]}ids 代码块id数组
返回:
- {
CodeBlockDSL} 命中的代码块dsl
- {
详情:
根据代码块id数组获取代码dsl
getEditStatus
返回:
{boolean}是否可编辑
详情:
获取当前编辑状态
setEditStatus
扩展支持: 是
参数:
{boolean}status 是否可编辑
返回:
{Promise<void>}
详情:
设置代码块编辑状态
setCombineIds
扩展支持: 是
参数:
{string[]}ids 代码块id数组
返回:
{Promise<void>}
详情:
设置当前选中组件已关联绑定的代码块id数组
getCombineIds
返回:
{string[]}代码块id数组
详情:
获取当前选中组件已关联绑定的代码块id数组
getUndeletableList
返回:
{(string | number)[]}代码块id数组
详情:
获取不可删除列表
setUndeleteableList
扩展支持: 是
参数:
{(string | number)[]}codeIds 代码块id数组
返回:
{Promise<void>}
详情:
设置不可删除列表:为业务逻辑预留的不可删除的代码块列表,由业务逻辑维护(如代码块上线后不可删除)
setCodeDraft
参数:
{string | number}codeId 代码块id{string}content 代码草稿内容
返回:
{void}
详情:
将代码草稿写入 localStorage
getCodeDraft
参数:
{string | number}codeId 代码块id
返回:
{string | null}代码草稿内容
详情:
从 localStorage 读取代码草稿
removeCodeDraft
参数:
{string | number}codeId 代码块id
返回:
{void}
详情:
删除 localStorage 中的代码草稿
deleteCodeDslByIds
扩展支持: 是
参数:
{(string | number)[]}codeIds 需要删除的代码块id数组{Object}options 可选配置{boolean}doNotPushHistory 是否不写入历史记录(默认 false){string}historyDescription 见 editorService 历史记录相关 options{HistoryOpSource}historySource 见 editorService 历史记录相关 options
返回:
{Promise<void>}
详情:
在dsl数据源中删除指定id的代码块,每删除一个会触发一次
remove事件TIP
对每个实际存在并被删除的代码块,会自动调用
historyService.pushCodeBlock入栈一条newContent=null的删除记录;不存在的 id 不会入历史。传入doNotPushHistory: true也可显式跳过写入历史栈。
undo
参数:
{Id}id 代码块id
返回:
{Promise<CodeBlockStepValue | null>}撤销的 step;栈不存在或已无可撤销时返回null
详情:
撤销指定代码块的最近一次变更。内部根据 historyService 取出 step 后, 复用 setCodeDslByIdSync / deleteCodeDslByIds 写回, 并自动带上
doNotPushHistory: true,确保不会再次入栈。写回会触发对应的
addOrUpdate/remove事件,编辑器内部据此重新维护DepTargetType.CODE_BLOCK的 dep target,无需调用方额外处理。对于带有
changeRecords的更新 step,会按propPath局部 patch 当前代码块内容;缺省才退化为整内容替换, 避免冲掉同代码块上的其它无关变更。示例:
import { codeBlockService } from "@tmagic/editor";
if (codeBlockService.canUndo("code_1234")) {
await codeBlockService.undo("code_1234");
}redo
参数:
{Id}id 代码块id
返回:
{Promise<CodeBlockStepValue | null>}重做的 step;栈不存在或已无可重做时返回null
详情:
重做指定代码块的下一次变更。其它行为同 undo。
canUndo
参数:
{Id}id 代码块id
返回:
{boolean}
详情:
当前指定代码块是否可撤销,等价于
historyService.canUndoCodeBlock(id)。
canRedo
参数:
{Id}id 代码块id
返回:
{boolean}
详情:
当前指定代码块是否可重做,等价于
historyService.canRedoCodeBlock(id)。
setParamsColConfig
参数:
{TableColumnConfig}config 参数列配置
返回:
{void}
详情:
设置代码块入参表格列配置
getParamsColConfig
返回:
{TableColumnConfig | undefined}参数列配置
详情:
获取代码块入参表格列配置
getUniqueId
返回:
{Promise<string>}代码块唯一id
详情:
生成代码块唯一id(格式为
code_xxxx),与已有id冲突时会递归重试
copyWithRelated
参数:
- {
MNode|MNode[]} config 组件节点配置 {TargetOptions}collectorOptions 可选的依赖收集器配置
查看 MNode 及关联类型定义
tsexport type MNode = MComponent | MContainer | MIteratorContainer | MPage | MApp | MPageFragment;tsexport interface MComponent { /** 组件ID,默认为${type}_${number}}形式, 如:page_123 */ id: Id; /** 组件类型 */ type?: string; /** 组件显示名称 */ name?: string; /** 组件根Dom上的class */ className?: string; /* 关联事件集合 */ events?: EventConfig[]; /** 是否隐藏 */ visible?: boolean; /** 显示条件中配置的数据源条件的编译结果 */ condResult?: boolean; /** 组件根Dom的style */ style?: StyleSchema; [NODE_CONDS_KEY]?: DisplayCond[]; [NODE_CONDS_RESULT_KEY]?: boolean; [key: string]: any; }tsexport interface MContainer extends MComponent { /** 容器类型,默认为'container' */ type?: NodeType.CONTAINER | string; /** 容器子元素 */ items: (MComponent | MContainer)[]; }tsexport interface MIteratorContainer extends MContainer { type: 'iterator-container'; iteratorData: any[]; dsField: string[]; itemConfig: { layout: string; [NODE_CONDS_KEY]: DisplayCond[]; style: Record<string, string | number>; }; }tsexport interface MPage extends MContainer { /** 页面类型 */ type: NodeType.PAGE; }tsexport interface MApp extends MComponent { /** App页面类型,app作为整个结构的根节点;有且只有一个 */ type: NodeType.ROOT; /** */ items: (MPage | MPageFragment)[]; /** 代码块 */ codeBlocks?: CodeBlockDSL; dataSources?: DataSourceSchema[]; dataSourceDeps?: DataSourceDeps; dataSourceCondDeps?: DataSourceDeps; dataSourceMethodDeps?: DataSourceDeps; }tsexport interface MPageFragment extends MContainer { /** 页面类型 */ type: NodeType.PAGE_FRAGMENT; }- {
返回:
{void}
详情:
复制组件时会带上组件关联的代码块,将关联的代码块dsl存储到 localStorage
paste
返回:
{void}
详情:
粘贴代码块。从 localStorage 读取已复制的代码块dsl并写入当前dsl,已存在同id的代码块不会被覆盖
resetState
返回:
{void}
详情:
重置 codeBlockService 状态
destroy
返回:
{void}
详情:
销毁 codeBlockService,重置状态并移除所有事件监听和插件
usePlugin
详情:
usePlugin支持灵活细致的扩展, 上述方法中标记有
扩展支持: 是的方法都支持使用usePlugin扩展
每个支持扩展的方法都支持定制before、after两个hook来干预原有方法的行为,before可以用于修改传入参数,after可以用于修改返回的值
removeAllPlugins
- 详情:
删掉当前设置的所有扩展