Skip to content

Editor 编辑器 ​

简介 ​

富文本编辑器,预设了常用样式与块级菜单,开箱即用。

图片上传依赖于 launch api.upload 接口,需要保证接口返回一个文件地址。

编辑器能用的功能(features)与工具栏显示的按钮(toolbar)都可以裁剪,两者都是逗号分隔的字符串; 功能没开启时,对应的键盘快捷键也一并失效。

光标进入表格单元格后,表格上方会浮出工具条,支持行列增删、合并与拆分、表头切换、 单元格底色与对齐、拖拽调整列宽,Tab / 方向键可在单元格间移动。表格格式会随 v-model 的值一起保存,下次渲染时自动还原。

工具条的「字体颜色」只作用于选中的文字,表格工具条里的「单元格文字颜色」是单元格级默认色(空单元格也生效、可框选批量设置),两者叠加时以字体颜色为准;「清除格式」只作用于文字内容,单元格底色与字色请用表格工具条的「清除」按钮。

代码演示 ​

基础使用 ​

使用 v-model 双向绑定编辑器值。

表单验证 ​

Editor 组件接入了 element-plus 表单验证逻辑,使其可以像 element-plus 表单组件一样使用。

浮动工具栏 ​

通过 mode="float" 切换到浮动工具栏,适合空间有限的场景:选中文本后浮出「行内样式」工具条(末尾的「更多」可展开全部操作);鼠标移入编辑器时,当前块的左侧浮出「+」入口按钮,点击弹出块级样式的多级菜单。

自定义工具栏按钮 ​

通过 toolbar 指定固定工具栏显示哪些按钮、怎么分组:, 分隔按钮,| 分隔按钮组。

自定义可用功能 ​

通过 features 指定编辑器能用哪些功能。未启用的功能不会出现在任何工具栏里,浮动工具栏与块级菜单同样受它约束, 对应的键盘快捷键也一并失效 —— 例如没开 bold,除了没有加粗按钮,⌘/Ctrl + B 也不会生效。

调用编辑器方法 ​

组件实例上暴露了格式化与插入方法,可以在外部触发,例如往光标处插入一段文本。

API ​

EditorProps ​

属性描述类型默认值
model-value (v-model)编辑器当前值string-
placeholder编辑器占位文本string-
height编辑器高度string-
max-height编辑器最大高度string-
readonly是否只读booleanfalse
disabled是否禁用booleanfalse
mode工具栏展示形态,static 固定工具栏 / float 浮动工具栏'static' | 'float'static
toolbar固定工具栏展示的按钮,, 分隔按钮、| 分隔按钮组;传不含有效按钮的值(如 none)即隐藏工具栏string全部按钮的预设分组
features编辑器可使用的功能,, 分隔,取值见功能与按钮;不配置表示不限制string-

EditorEmits ​

事件描述类型
update:modelValue编辑器值改变时触发(value: string) => void
change编辑器值改变时触发(value: string) => void

EditorExpose ​

通过组件 ref 拿到的实例方法,可在外部触发格式化、插入与查询。 toggleMark 的 name 取值为 bold / italic / underline / strikethrough / code / superscript / subscript。

文本 ​

方法描述返回值
focus()让编辑器获得焦点-
insertText(text)在光标处插入纯文本,有选区时替换选区内容-
getContent()取当前内容,空文档返回空串string
setContent(html)用 HTML 覆盖整个文档(不进撤销历史)-
serialize()序列化当前文档为 HTMLstring
isDocEmpty()文档是否为空boolean
hasTool(tool)某个功能是否可用(由 features 决定)boolean

历史 ​

方法描述返回值
undo()撤销-
redo()重做-
canUndo()是否可以撤销boolean
canRedo()是否可以重做boolean

行内样式 ​

方法描述返回值
toggleMark(name)切换行内样式-
isMarkActive(name)当前选区是否已应用某个行内样式boolean
getTextStyleValue(key)取当前选区的文字样式,key 取值为 font / size / color / backgroundstring
formatFont(value)设置字体-
formatSize(value)设置字号-
formatSizeDelta(delta, callback)按步长增减字号,回调收到调整后的字号-
formatColor(color)设置文字颜色,不传表示清除-
formatBackground(color)设置文字背景色,不传表示清除-

块级样式 ​

方法描述返回值
formatHeading(value)设置段落类型,传入当前类型会退回正文-
getActiveHeadingType()取光标所在段落的类型HeadingParagraphType
formatAlign(value)设置对齐方式,重复调用当前对齐会取消对齐-
isAlignActive(value)某个对齐方式是否已生效boolean
formatIndent(delta)增减缩进层级,-1 减少 / +1 增加-
formatList(type)切换列表,再调用当前列表类型会取消列表-
getListType()取光标所在列表的类型ListType | undefined
formatBlockQuote()切换引用-
isBlockQuoteActive()光标是否在引用里boolean
formatCodeBlock()切换代码块-
isCodeBlockActive()光标是否在代码块里boolean
clearFormats()清除选区的所有行内样式与块级样式-

链接 ​

方法描述返回值
formatLink(url, target, text)给选区添加链接;选区为空时会插入 text 并链接它-
unwrapLink()去掉当前选区所在的整个链接-
isLinkActive()当前选区是否在链接里boolean
getLinkAttrs()取当前选区的链接信息{ url, target, text } | null

插入 ​

方法描述返回值
insertImage(url, file, width, height)插入图片,传 file 时会走上传流程-
insertVideo(url, width, height)插入视频-
insertFormula(value)插入公式;光标在公式上时改为更新它-
insertTable(rows, columns)插入表格,并在表格后补一个可落脚的段落-
insertDivider()在光标所在块级元素之后插入分割线-
updateImage(attrs) / updateVideo(attrs)更新图片 / 视频节点的属性-
isImageActive() / isVideoActive() / isFormulaActive()光标是否在对应节点上boolean
getImageAttrs() / getVideoAttrs() / getFormulaAttrs()取对应节点的属性,不在节点上返回 nullRecord<string, any> | null

表格 ​

方法描述返回值
insertRowAbove() / insertRowBelow()在上方 / 下方插入行-
deleteRow()删除当前行-
insertColumnLeft() / insertColumnRight()在左侧 / 右侧插入列-
deleteColumn()删除当前列-
deleteTable()删除整张表格-
mergeCells()合并框选的多个单元格,选区不是矩形时不执行-
splitCell()拆分合并过的单元格-
toggleHeaderRow() / toggleHeaderColumn() / toggleHeaderCell()切换行 / 列 / 单元格表头-
setCellBackground(color)设置单元格底色,不传表示清除-
setCellColor(color)设置单元格默认文字色,不传表示清除-
setCellVerticalAlign(value)设置单元格垂直对齐,不传表示清除-
moveRowUp() / moveRowDown()上移 / 下移当前行-
moveColumnLeft() / moveColumnRight()左移 / 右移当前列-
isInTable()光标是否在表格里boolean
getTableState()取当前表格的状态快照,不在表格里返回 nullEditorTableState | null

功能与按钮 ​

features 与 toolbar 使用同一套 key。features 里的功能没开启时,toolbar 里即使配了对应按钮也不会出现; toolbar 里没配的按钮不会显示在固定工具栏上,但仍可通过实例方法调用。

key分类说明
undo历史撤销
redo历史重做
heading块级段落类型(标题)
ordered-list块级有序列表
bulleted-list块级无序列表
indent-decrease块级减少缩进
indent-increase块级增加缩进
align-left块级左对齐
align-center块级居中对齐
align-right块级右对齐
align-justify块级两端对齐
blockquote块级引用
code-block块级代码块
bold行内加粗
italic行内斜体
underline行内下划线
strikethrough行内删除线
code行内行内代码
superscript行内上标
subscript行内下标
font行内字体
size行内字号
color行内文字颜色
background行内文字背景色
link行内链接
image插入图片
video插入视频
table插入表格
formula插入公式
divider插入分割线
clear其他清除格式
source其他源码模式

内置快捷键如下,对照的都是上表里的 key —— 功能没开启时按键同样不生效:

快捷键对应功能
⌘/Ctrl + Zundo
⌘/Ctrl + Y、⇧⌘Zredo
⌘/Ctrl + Bbold
⌘/Ctrl + Iitalic
⌘/Ctrl + Uunderline
Tab、⇧Tabindent-increase、indent-decrease

退格、回车、全选、方向键这些编辑操作不属于功能开关的范围,任何配置下都可用。 Tab 在表格里是切换到相邻单元格(属 table),只有在表格之外才是缩进。

基于 MIT 许可发布