Vue3整合WangEditor富文本编辑器的实践指南

 更新时间:2025年03月17日 14:49:05   作者:茶颜悅色  
这篇文章主要为大家详细介绍了如何在 Vue 3 项目中集成 WangEditor 富文本编辑器,实现图文混排、自定义扩展等高阶功能,感兴趣的小伙伴可以了解下

一、为什么选择 WangEditor

作为国内流行的开源富文本编辑器,WangEditor 具有以下优势:

  • 轻量高效:压缩后仅 1.5MB,远小于其他同类产品
  • 开箱即用:提供 Vue/React 官方封装组件
  • 扩展性强:支持自定义菜单、异步图片上传等
  • 安全可靠:内置 XSS 过滤机制

二、快速集成到 Vue 项目

1. 安装依赖

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

2. 基础组件封装

<template>
  <div class="editor-wrapper">
    <!-- 工具栏 -->
    <Toolbar 
      :editor="editorRef" 
      :defaultConfig="toolbarConfig"
    />
    
    <!-- 编辑器 -->
    <Editor
      v-model="valueHtml"
      :defaultConfig="editorConfig"
      @onCreated="handleCreated"
    />
  </div>
</template>

<script setup>
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'

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

// 内容数据绑定
const valueHtml = ref('<p>初始内容</p>')
</script>

三、核心功能实现

1. 图片上传集成

editorConfig.MENU_CONF['uploadImage'] = {
  allowedFileTypes: ['image/*'],
  customUpload: async (file, insertFn) => {
    try {
      const ossUrl = await uploadToOSS(file) // 对接云存储
      insertFn(ossUrl, '图片描述') // 插入编辑器
    } catch (error) {
      console.error('上传失败:', error)
    }
  }
}

注:推荐结合七牛云/阿里云 OSS 实现文件存储

2. 数据双向绑定

// 父组件传值
watch(() => props.modelValue, (newVal) => {
  if (valueHtml.value !== newVal) {
    valueHtml.value = newVal
  }
})

// 子组件更新
watch(valueHtml, (newVal) => {
  emit('update:modelValue', newVal)
})

3. 工具栏定制

// 隐藏不常用功能
const toolbarConfig = {
  excludeKeys: [
    'fullScreen', 
    'codeBlock', 
    'code'
  ]
}

四、高级实践技巧

1. 动态获取工具栏配置

onMounted(() => {
  setTimeout(() => {
    const editor = editorRef.value
    const toolbar = DomEditor.getToolbar(editor)
    console.log(toolbar.getConfig().toolbarKeys)
  }, 1500)
})

2. 内存泄漏防护

onBeforeUnmount(() => {
  const editor = editorRef.value
  editor?.destroy() // 必须销毁实例
})

3. 内容变化监听

const handleCreated = (editor) => {
  editorRef.value = editor
  
  // 监听编辑器变化
  editor.on('change', () => {
    console.log('内容变化:', editor.getHtml())
  })
}

五、最佳实践建议

样式隔离:通过外层容器限制编辑器宽度

.editor-wrapper {
  max-width: 1200px;
  margin: 0 auto;
  border: 1px solid #eee;
}

性能优化:

  • 使用 shallowRef 存储编辑器实例
  • 避免频繁操作 DOM

安全策略:

启用 XSS 过滤

editorConfig = {
  MENU_CONF: {
    uploadImage: {
      customAlert: (s) => { 
        alert(s) 
      }
    }
  }
}

使用组件:

<RichTextEditor v-model="content" />

六、总结

通过本文的实践,我们已经实现了:

✅ 编辑器的完整集成

✅ 云端图片上传

✅ 数据双向绑定

✅ 工具栏定制

✅ 内存安全防护

预览功能Vue3实现HTML内容预览功能

官方资源

到此这篇关于Vue3整合WangEditor富文本编辑器的实践指南的文章就介绍到这了,更多相关Vue3整合WangEditor富文本内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • VUE3引入html文件并传值方法举例

    VUE3引入html文件并传值方法举例

    这篇文章主要给大家介绍了关于VUE3引入html文件并传值的相关资料,这是最近在项目中遇到了的一个需求,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Vue使用mockjs问题(返回数据、get、post 请求)

    Vue使用mockjs问题(返回数据、get、post 请求)

    这篇文章主要介绍了Vue使用mockjs问题(返回数据、get、post 请求),具有很好的参考价值,希望对大家有所帮助。
    2023-05-05
  • 详解如何在Vue中进行表单自定义验证

    详解如何在Vue中进行表单自定义验证

    在Vue应用中,表单验证是非常重要的一部分,Vue提供了一些内置的验证规则,比如required、min、max等,但是有时候我们需要对表单进行自定义验证,以满足特定的业务需求,本文将介绍如何在Vue中进行表单自定义验证,感兴趣的朋友可以参考下
    2023-12-12
  • 基于vue-cli3+typescript的tsx开发模板搭建过程分享

    基于vue-cli3+typescript的tsx开发模板搭建过程分享

    这篇文章主要介绍了搭建基于vue-cli3+typescript的tsx开发模板,本文通过实例代码截图的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Vue3项目中引入html页面的方法举例

    Vue3项目中引入html页面的方法举例

    这篇文章主要给大家介绍了关于Vue3项目中引入html页面的相关资料,Vue3是一个JavaScript框架,通常我们使用它来构建单页应用程序(SPA),如果你想在HTML页面中使用Vue3,可以参考这篇文章,需要的朋友可以参考下
    2023-09-09
  • vuex实现的简单购物车功能示例

    vuex实现的简单购物车功能示例

    这篇文章主要介绍了vuex实现的简单购物车功能,结合实例形式分析了vuex购物车组件相关商品列表、购物车创建、添加、删除、清空等相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • 使用vite创建vue3之vite.config.js的配置方式

    使用vite创建vue3之vite.config.js的配置方式

    这篇文章主要介绍了使用vite创建vue3之vite.config.js的配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 在vue中:style 的使用方式汇总

    在vue中:style 的使用方式汇总

    在Vue开发中使用:style绑定样式是常见需求,应注意:class与:style的配合使用,错误的使用可能导致样式不生效,正确的方法是使用数组绑定多个样式,这些技巧有助于提高开发效率和保持代码整洁,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • vue之el-upload使用FormData多文件同时上传问题

    vue之el-upload使用FormData多文件同时上传问题

    这篇文章主要介绍了vue之el-upload使用FormData多文件同时上传问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue.js实现大转盘抽奖总结及实现思路

    Vue.js实现大转盘抽奖总结及实现思路

    这篇文章主要介绍了 Vue.js实现大转盘抽奖总结及实现思路,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10

最新评论