vue3封装王编辑器组件
一、定义组件
<template>
<div style="border: 1px solid #ccc">
<Toolbar style="border-bottom: 1px solid #ccc" :editor="editorRef" :defaultConfig="toolbarConfig"
mode="default" />
<Editor style="height: 500px; overflow-y: hidden;" v-model="valueHtml" :defaultConfig="editorConfig"
mode="default" @onCreated="handleCreated" />
</div>
</template>
<script setup>
import { baseURL } from '@/utils/request'
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { onBeforeUnmount, ref, watch, shallowRef, onMounted, defineModel } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef()
// 内容 HTML
const valueHtml = ref('<p><br></p>')
const model = defineModel()
watch(valueHtml,()=>{
console.log('valueHtml变化了')
model.value = valueHtml.value
})
// 模拟 ajax 异步获取内容
onMounted(() => {
setTimeout(() => {
// 设置内容
valueHtml.value = model.value
}, 100)
})
const toolbarConfig = {}
const editorConfig = {
placeholder: '请输入内容...' ,
MENU_CONF:{
uploadImage:{
// 后端服务地址
server: baseURL+'/api/upload2.php',
// 后端接收文件的字段名 必须与后端保持一致
// 默认字段名 wangeditor-uploaded-image
fieldName: 'wangeditor-uploaded-image'
}
}
}
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
const editor = editorRef.value
if (editor == null) return
editor.destroy()
})
const handleCreated = (editor) => {
editorRef.value = editor // 记录 editor 实例,重要!
}
</script>
二、使用组件
<wang-editor v-if="dialogVisible" v-model="ruleForm.content"> </wang-editor>

浙公网安备 33010602011771号