当前位置: 首页 > news >正文

vue3+wangEditor实现富文本编辑器

1、这里介绍的是富文本编辑器的wangEditor,官网是:wangEditor

2、代码实例:

<template><!-- 创建一个富文本编辑器的盒子 --><div><!-- 工具栏组件 --><Toolbarstyle="border-bottom: 1px solid #ccc":editor="editorRef"<!-- 绑定编辑器实例 -->:defaultConfig="toolbarConfig"<!-- 工具栏配置 -->:mode="mode"<!-- 编辑器模式(默认 'default') -->/><Editorstyle="height: 500px; overflow-y: hidden"v-model="valueHtml"<!-- 双向绑定编辑器的 HTML 内容 -->:defaultConfig="editorConfig"<!-- 编辑器配置(如占位符) -->:mode="mode"<!-- 模式(同工具栏) -->@onCreated="handleCreated"<!-- 编辑器创建完成时的回调 -->/></div>
</template><script setup>
// 引入 wangEditor 的 CSS 样式(必须)
import '@wangeditor/editor/dist/css/style.css'
import { onBeforeUnmount, ref, shallowRef } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
// // 编辑器实例(必须用 shallowRef 避免响应式代理导致问题)
const editorRef = shallowRef()
// 存储编辑器内容的 HTML(初始值为 '<p>hello</p>')
const valueHtml = ref('<p>hello</p>')
// 工具栏配置(空对象表示使用默认配置)
const toolbarConfig = {}
// 编辑器配置(设置占位提示文字)
const editorConfig = { placeholder: '请输入内容...' }
// 组件销毁时,销毁编辑器实例(避免内存泄漏)
onBeforeUnmount(() => {const editor = editorRef.valueif (editor == null) returneditor.destroy()
})
// 编辑器创建完成时的回调函数
const handleCreated = (editor) => {editorRef.value = editor // 保存编辑器实例到 editorRef
}
</script><style lang="scss" scoped></style>

3、富文本编辑器内容失去响应式怎么操作?

双向同步​​:

  • ​编辑器 -> Vue​​: 通过配置 editorConfig.onChange 或在 handleCreated 中使用 editor.on('change', ...),在回调中手动执行 valueHtml.value = editor.getHtml()
<template><div style="border: 1px solid #ccc"><Toolbar :editor="editorRef" :defaultConfig="toolbarConfig" /><Editorstyle="height: 500px; overflow-y: hidden"v-model="valueHtml" <!-- 这里保留 v-model,用于初始化 -->:defaultConfig="editorConfig"@onCreated="handleCreated"/></div>
</template><script setup>
import { onBeforeUnmount, ref, shallowRef } from 'vue';
import { Editor, Toolbar } from '@wangeditor/editor-for-vue';const editorRef = shallowRef();
const valueHtml = ref('<p>hello</p>'); // 这个变量仍然是内容的“真相来源”// 配置编辑器,启用 onChange 回调
const editorConfig = {placeholder: '请输入内容...',// 关键:定义编辑器自身的 onChange 函数onChange: (editor) => {// 当编辑器内容变化时,这个函数会被触发console.log('onChange:', editor.getHtml());// 手动同步编辑器的内容到 Vue 响应式变量valueHtml.value = editor.getHtml();},
};const handleCreated = (editor) => {editorRef.value = editor;// 你也可以通过实例监听(与配置中的 onChange 二选一即可)// editor.on('change', () => {//   valueHtml.value = editor.getHtml();// });
};onBeforeUnmount(() => {const editor = editorRef.value;if (editor == null) return;editor.destroy();
});
</script>
  • ​​Vue -> 编辑器​​: 通过 watch 监听 valueHtml,在回调中手动执行 editor.setHtml(newValue),并添加防循环判断。
import { watch } from 'vue';// ... 其他代码同上 ...watch(valueHtml, (newVal, oldVal) => {// 防止循环更新:如果新内容和编辑器当前内容一致,则不再设置if (!editorRef.value) return;if (newVal === editorRef.value.getHtml()) return; // 使用编辑器 API 同步内容editorRef.value.setHtml(newVal);
});

3、效果图

http://www.xdnf.cn/news/1392373.html

相关文章:

  • cursor的setting設置換行
  • 命令拓展(草稿)
  • Vue开发准备
  • Silvaco TCAD | Victory DoE的基本使用方法(三)
  • nacos单机部署并开启鉴权
  • 2025.8.29机械臂实战项目
  • Windows 下 MSYS2 + MinGW-w64 配置 Fyne GUI 编译环境全流程
  • Redis-分布式缓存
  • Java深拷贝与浅拷贝核心解析
  • 设计模式:装饰模式(Decorator Pattern)
  • Kubernetes 与 GitOps 的深度融合实践指南
  • 【3D入门-指标篇上】3D 网格重建评估指标详解与通俗比喻
  • 3D 数字孪生可视化技术在学校项目中的应用
  • “破译”的密钥/算法类型
  • 【工具】开源大屏设计器 自用整理
  • LeetCode第二题知识点2 ---- 栈、堆、地址
  • LeetCode - 128. 最长连续序列
  • Vue3+Ant-design-vue 实现树形穿梭框
  • BlueKing-ci
  • 币安创始人赵长鹏:香港需要更广泛的加密货币产品来与美国和阿联酋竞争
  • docker-相关笔记
  • Cesium 入门教程(十三):粒子系统实例
  • 2025年03月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • springboot中循环依赖的解决方法-使用反射
  • mysql双机热备(主主模式)
  • Java项目实现【记录系统操作日志】功能
  • 基于FPGA的DDR3读写实验学习
  • 《ArkUI 记账本开发:状态管理与数据持久化实现》
  • el-table合并列实例
  • 光谱相机多层镀膜技术如何提高透过率