Vue3中封装王编辑器组件-2

一、定义组件

<template>
    <div style="border: 1px solid #ccc">
      <Toolbar
        style="border-bottom: 1px solid #ccc"
        :editor="editorRef"
        :defaultConfig="toolbarConfig"
        :mode="mode"
      />
      <Editor
        style="height: 500px; overflow-y: hidden;"
        v-model="valueHtml"
        :defaultConfig="editorConfig"
        :mode="mode"
        @onCreated="handleCreated"
      />
    </div>
</template>

<script>
  import '@wangeditor/editor/dist/css/style.css' // 引入 css
  import { onBeforeUnmount, computed, shallowRef} from 'vue'
  import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
  import { API_URL } from '@/utils/request'
  export default {
    components: { Editor, Toolbar },
    props: ['content'],
    emits: ['update:content'],
    setup(props,{emit}) {
      // 编辑器实例,必须用 shallowRef
      const editorRef = shallowRef()
       
      const valueHtml = computed({
          get() {
            return props.content;
          },
          set(value) {
            emit('update:content', value);
          }
      });

      const toolbarConfig = {}
      const editorConfig = { 
        placeholder: '请输入内容...',
        MENU_CONF: {
           uploadImage: {
              server: API_URL+'/api/upload2.php'
            }
         }
      }


      // 组件销毁时,也及时销毁编辑器
      onBeforeUnmount(() => {
        const editor = editorRef.value
        if (editor == null) return
        editor.destroy()
      })

      

      const handleCreated = (editor) => {
        editorRef.value = editor // 记录 editor 实例,重要!
      }

      return {
        editorRef,
        valueHtml,
        mode: 'default', // 或 'simple'
        toolbarConfig,
        editorConfig,
        handleCreated
      }
    },
  }
</script>

 

二、组件使用

<wang-editor v-if="dialogVisible" v-model:content="ruleForm.content">
                            </wang-editor>

 

 

posted @ 2025-01-25 11:14  白头吟  阅读(24)  评论(0)    收藏  举报