# useWangEditor
经过 useWangEditor 处理后,返回的 editable 和 toolbar 分别对应编辑器和菜单栏的配置项,不过此时的配置项对象具备了响应式特性,我们可以直接修改 editable/toolbar 对应属性来更新或重载编辑器。
如果传入的 editableOption 和 toolbarOption 是响应式数据,内部将自动解除与之前的关联,也就意味着经过 useWangEditor 处理后得到的 editable 和 toolbar 配置对象,即使内容发生变化也不会触发之前的依赖更新!!!
# useWangEditor 的类型
/**
* vue hook,用于实现编辑器配置项的动态绑定
* @param {Object} editableOption 编辑器主体部分的配置
* @param {Object} toolbarOption 菜单栏配置
* @param {Number} reloadDelay 防抖时长,用于重载的延迟控制,默认值:500,单位:毫秒
*/
declare function useWangEditor(
editableOption: WeEditableOption | null = null,
toolbarOption: WeToolbarOption | null = null,
reloadDelay: number
): {
editable: Required<WeEditableOption>
toolbar: Required<WeToolbarOption>
getEditable: {
(): IDomEditor | undefined;
(timeout: number): Promise<IDomEditor>;
}
getToolbar: {
(): Toolbar | undefined;
(timeout: number): Promise<Toolbar>;
}
clearContent: () => void
syncContent: () => void
reloadEditor: () => void
}
# 动态修改配置
修改 editable 或 toolbar 的属性即可。
import { useWangEditor } from 'wangeditor5-for-vue2'
export default {
data() {
return {
...useWangEditor(),
}
},
mounted() {
this.editable.config.placeholder = '新的 placeholder'
// 切换为只读模式
this.editable.config.readOnly = true
this.toolbar.mode = 'simple'
},
}
# API - clearContent
不仅会清除编辑器内容,还会同步 v-bind:json.sync/v-bind:html.sync 数据
const { clearContent } = useWangEditor()
clearContent()
# API - syncContent
v0.0.6+新增
由于组件内部对 v-model 的数据更新做了防抖处理(防抖时长由 WeEditableOption.delay 控制)。当 delay 的数值稍大,我们在输入内容后快速点击提交表单,那么此时 v-model 的数据将不是最新的,这将得不偿失。因此我们可以在表单提交前执行 syncContent 来解除 WeEditableOption.delay 的副作用,强制更新 v-model 数据,即可防止数据丢失。
以 element-ui 为例,在调用 ElForm.validate 方法前执行 syncContent 方法,即可避免数据丢失。
<template>
<el-form ref="ruleForm" :model="formData" :rules="formRule">
<el-form-item label="文章" prop="json">
<we-editor
:toolbar-option="toolbar"
:editable-option="editable"
:json.sync="formData.json"
:html.sync="formData.html"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submit">提交表单</el-button>
</el-form-item>
</el-form>
</template>
<script>
import { useWangEditor } from 'wangeditor5-for-vue2'
import UPrism from '../components/u-prism.vue'
export default {
components: { UPrism },
data() {
const { editable, toolbar, syncContent } = useWangEditor({
delay: 5000, // 无操作 5s 后才会同步表单数据
config: {
placeholder: '表单提交前使用 syncContent API 强制同步数据,确保数据不被丢失',
},
})
return {
editable,
toolbar,
syncContent,
formData: {
json: '',
html: '',
},
formRule: {
json: [{ required: true, message: '内容不能为空', trigger: 'change' }],
},
}
},
methods: {
// 提交表单
submit() {
// 强制同步 v-model 数据
this.syncContent()
// 表单验证
this.$refs.ruleForm.validate((valid) => {
if (!valid) return
console.log({ ...this.formData })
})
},
},
}
</script>
# API - getToolbar
获取菜单栏实例
# 同步模式
当我们不传入参数或传入的不是一个数字时,此时为同步模式。
const { getToolbar } = useWangEditor()
const toolbarInstance: Toolbar | undefined = getToolbar()
if (toolbarInstance) {
// do somthing
} else {
// do somthing
}
# 异步模式
v0.0.4+新增
当我们传入一个数字时,传入的是异步超时时间。单位:毫秒。
const { getToolbar } = useWangEditor()
getToolbar(3000)
.then((inst: Toolbar) => {
// do somthing
})
.catch((e: Error) => {
// do somthing
})
# API - getEditable
获取编辑器实例
# 同步模式
当我们不传入参数或传入的不是一个数字时,此时为同步模式。
const { getEditable } = useWangEditor()
const editableInstance: IDomEditor | undefined = getEditable()
if (editableInstance) {
console.log(editableInstance.children)
} else {
console.error('编辑器未实例化')
}
# 异步模式
v0.0.4+新增
当我们传入一个数字时,传入的是异步超时时间。单位:毫秒。
const { getEditable } = useWangEditor()
getEditable(3000)
.then((inst: IDomEditor) => {
// do somthing
})
.catch((e: Error) => {
// do somthing
})
# API - reloadEditor
重载编辑器(销毁并重新创建)。
重载分为编辑器重载和菜单栏重载,编辑器重载会自动触发菜单栏重载,而菜单栏重载却不会触发编辑器重载。
const { reloadEditor } = useWangEditor()
// 强制重载编辑器
reloadEditor()
# 会触发重载的配置项
- 菜单栏
WeToolbarOption的所有属性
- 编辑器
WeEditableOption.modeWeEditableOption.config.customPasteWeEditableOption.config.decorateWeEditableOption.config.hoverbarKeysWeEditableOption.config.maxLengthWeEditableOption.config.EXTEND_CONFWeEditableOption.config.MENU_CONF
WeEditableOption的其它配置项虽不会触发重载,但是支持动态配置