第五节 Vue3集成wangEditor5富文本

亮子 2025-06-03 08:35:00 119 0 0 0

1、安装

npm install @wangeditor/editor --save
npm install @wangeditor/editor-for-vue --save

2、模板

<template>
    <div>
        <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>
        <div style="margin-top: 20px">
            <el-button type="primary" @click="onShowText">获取内容</el-button>
        </div>
    </div>
</template>

3、引入

import "@wangeditor/editor/dist/css/style.css"; // 引入 css

import { onBeforeUnmount, ref, shallowRef, onMounted } from "vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";

4、脚本

const mode = ref("default");

// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();

// 内容 HTML
const valueHtml = ref("<p>hello</p>");

// 模拟 ajax 异步获取内容
onMounted(() => {
    setTimeout(() => {
        valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
    }, 1500);
});

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

const toolbarConfig = {}
const editorConfig = { placeholder: '请输入内容...' }

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

const onShowText = () => {
    console.log(editorRef.value.getHtml());
    console.log('mode', mode.value);
    
};

5、完整代码

<template>
    <div>
        <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>
        <div style="margin-top: 20px">
            <el-button type="primary" @click="onShowText">获取内容</el-button>
        </div>
    </div>
</template>

<script setup lang="ts">
import "@wangeditor/editor/dist/css/style.css"; // 引入 css

import { onBeforeUnmount, ref, shallowRef, onMounted } from "vue";
import { Editor, Toolbar } from "@wangeditor/editor-for-vue";

const mode = ref("default");

// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef();

// 内容 HTML
const valueHtml = ref("<p>hello</p>");

// 模拟 ajax 异步获取内容
onMounted(() => {
    setTimeout(() => {
        valueHtml.value = "<p>模拟 Ajax 异步设置内容</p>";
    }, 1500);
});

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

const toolbarConfig = {}
const editorConfig = { placeholder: '请输入内容...' }

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

const onShowText = () => {
    console.log(editorRef.value.getHtml());
    console.log('mode', mode.value);
    
};
</script>

<style scoped></style>

参考文档