Editor Config
If you first-time use wangEditor, please see Get Started it to learn basic usage.
import { IEditorConfig } from '@wangeditor/editor'
const editorConfig: Partial<IEditorConfig> = { // TS syntax
// const editorConfig = { // JS syntax
/* editor config */
}
// create editor, or Vue React <Editor> component
TIP
You can use editor.getConfig()
to checkout editor's default config
placeholder
editorConfig.placeholder = 'Type your text'
readOnly
Default value is false
.
You can use editor.enable()
and editor.disable()
to toggle readOnly. see Editor API.
editorConfig.readOnly = true
autoFocus
Default value is true
.
editorConfig.autoFocus = false
scroll
Default value is true
. You can scroll editor area.
If you set false
, do not set editor-container
a fixed height, just set min-height
.
editorConfig.scroll = false
TIP
When you need to set false
?
- Editor height increases automatically
- Want a Google doc style, see Demo
maxLength onMaxLength
See demo.
import { IDomEditor } from '@wangeditor/editor'
editorConfig.maxLength = 1000
editorConfig.onMaxLength = function (editor: IDomEditor) { // TS syntax
// editorConfig.onMaxLength = function (editor) { // JS syntax
// trigger this when exceed maxlength
}
TIP
If you have no strong demand, do not set maxLength
.
Cause it may affect performance when text is too large.
hoverbarKeys
You can use editor.getConfig().hoverbarKeys
to checkout default config.
TIP
If you only unwanted hoverbar when select text, set mode: 'simple'
when creating editor
Use element type
You can config hoverbar menu keys by element type.
- You can checkout every element's type by
editor.children
, see the picture below - You can use
editor.getAllMenuKeys()
to checkout all embedded menu keys
editorConfig.hoverbarKeys = {
'link': {
// rewrite link element's hoverbar
menuKeys: ['editLink', 'unLink', 'viewLink'],
},
'image': {
// clear image element's hoverbar
menuKeys: [],
},
// others...
}
Custom match function
You can also custom a match function instead of use element type.
import { SlateNode, IDomEditor } from '@wangeditor/editor'
editorConfig.hoverbarKeys = {
'text': {
match: (editor: IDomEditor, n: SlateNode) => { // TS syntax
// match: (editor, n) => { // JS syntax
// match your node exactly
},
menuKeys: [ ... ], // custom your menu keys
},
// others...
}
You can see source code of all default hoverbar keys config.
onCreated
import { IDomEditor } from '@wangeditor/editor'
editorConfig.onCreated = (editor: IDomEditor) => { // TS syntax
// editorConfig.onCreated = (editor) => { // JS syntax
// editor created
}
onChange
import { IDomEditor } from '@wangeditor/editor'
editorConfig.onChange = (editor: IDomEditor) => { // TS syntax
// editorConfig.onChange = (editor:) => { // JS syntax
// editor's content or selection changed
console.log('content', editor.children)
}
onDestroyed
You can use editor.destroy()
to destroy editor. see API.
import { IDomEditor } from '@wangeditor/editor'
editorConfig.onDestroyed = (editor: IDomEditor) => { // TS syntax
// editorConfig.onDestroyed = (editor) => { // JS syntax
// editor destroyed
}
onFocus
import { IDomEditor } from '@wangeditor/editor'
editorConfig.onFocus = (editor: IDomEditor) => { // TS syntax
// editorConfig.onFocus = (editor) => { // JS syntax
// editor focused
}
onBlur
import { IDomEditor } from '@wangeditor/editor'
editorConfig.onBlur = (editor: IDomEditor) => { // TS syntax
// editorConfig.onBlur = (editor) => { // JS syntax
// editor blur
}
customPaste
You can prevent default paste event, redefine your custom paste logic.
import { IDomEditor } from '@wangeditor/editor'
editorConfig.customPaste = (editor: IDomEditor, event: ClipboardEvent): boolean => { // TS syntax
// editorConfig.customPaste = (editor, event) => { // JS syntax
// event is ClipboardEvent type, see https://developer.mozilla.org/zh-CN/docs/Web/API/ClipboardEvent
// const html = event.clipboardData.getData('text/html') // get paste html
// const text = event.clipboardData.getData('text/plain') // get paste text
// const rtf = event.clipboardData.getData('text/rtf') // get paste rtf data (word, wsp...)
// insert your custom text (sync)
editor.insertText('xxx')
// insert your custom text (async)
setTimeout(() => {
editor.insertText('yy')
}, 1000)
// 1. prevent default paste event.
event.preventDefault()
return false
// 2. continue default paste event.
// return true
}
customAlert
Redefine your custom editor alert.
import { message } from 'antd'
editorConfig.customAlert = (s: string, t: string) => { // TS syntax
// editorConfig.customAlert = (s, t) => { // JS syntax
switch (t) {
case 'success':
message.success(s)
break
case 'info':
message.info(s)
break
case 'warning':
message.warning(s)
break
case 'error':
message.error(s)
break
default:
message.info(s)
break
}
}
EXTEND_CONF
Use in third-party plugin, like mention plugin.