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>

 

posted @ 2025-01-25 16:49  白头吟  阅读(82)  评论(0)    收藏  举报