vue3使用wangeditor封装和自定义上传文件官方教程

 更新时间:2023年06月25日 17:35:16   作者:张旭超  
这篇文章主要为大家介绍了vue3使用wangeditor封装和自定义上传文件的官方教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>

1、基本配置

官方教程 https://www.wangeditor.com/

2、封装组件

/**
  initValue: 父组件传递过来的富文本框初始值,这里会实时监听,更新初始值,放置在弹窗中使用,没有钩子函数的更新。
  getEditorContent() 方法,父组件通过这个方法获取富文本编辑器的内容,包括数组格式的和html格式的内容
*/
<template>
  <div v-html="valueHtml"></div>
  <div style="border: 1px solid #ccc">
    <Toolbar
      style="border-bottom: 1px solid #ccc"
      :editor="editorRef"
      :defaultConfig="toolbarConfig"
      :mode="mode"
    />
    <Editor
      style="min-height: 100px; overflow-y: hidden; text-align: left;"
      v-model="valueHtml"
      :defaultConfig="editorConfig"
      :mode="mode"
      @onCreated="handleCreated"
      @onChange="handleChange"
    />
  </div>
</template>
<script setup>
import '@wangeditor/editor/dist/css/style.css' // 引入 css
import { onBeforeUnmount, ref, shallowRef, onMounted, nextTick, watch } from 'vue'
import { Editor, Toolbar } from '@wangeditor/editor-for-vue'
import axios from 'axios'
// 初始值
const props = defineProps({
  initValue: String
})
const emits = defineEmits(['getEditorContent'])
// const emits = defineEmits([''])
let mode = ref('default')
// 编辑器实例,必须用 shallowRef
const editorRef = shallowRef()
// 内容 HTML
const valueHtml = ref('')
// 模拟 ajax 异步获取内容
onMounted(() => {
  nextTick(() => { // 界面节点更新完以后再修改值。
    valueHtml.value = props.initValue
  })
})
// 工具栏配置
const toolbarConfig = {
  toolbarKeys: [
    // 菜单 key
    'headerSelect',
    'bold', // 加粗
    'italic', // 斜体
    'through', // 删除线
    'underline', // 下划线
    'bulletedList', // 无序列表
    'numberedList', // 有序列表
    'color', // 文字颜色
    'insertLink', // 插入链接
    'fontSize', // 字体大小
    'lineHeight', // 行高
    'uploadImage', // 上传图片
    'delIndent', // 缩进
    'indent', // 增进
    'deleteImage',//删除图片
    'divider', // 分割线
    'insertTable', // 插入表格
    'justifyCenter', // 居中对齐
    'justifyJustify', // 两端对齐
    'justifyLeft', // 左对齐
    'justifyRight', // 右对齐
    'undo', // 撤销
    'redo', // 重做
    'clearStyle', // 清除格式
    'fullScreen' // 全屏
  ]
}
const editorConfig = {
  placeholder: '请输入内容...', // 配置默认提示
  // readOnly: true,
  MENU_CONF: {                // 配置上传服务器地址
    uploadImage: {
      // 小于该值就插入 base64 格式(而不上传),默认为 0
      base64LimitSize: 5 * 1024, // 5kb
      // 单个文件的最大体积限制,默认为 2M
      // maxFileSize: 1 * 1024 * 1024, // 1M
      // // 最多可上传几个文件,默认为 100
      // maxNumberOfFiles: 5,
      // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []
      allowedFileTypes: ['image/*'],
      // 自定义上传
      async customUpload(file, insertFn) { // 文件上传
        const formData = new FormData();
        formData.set('file', file)
        // 这里根据自己项目封装情况,设置上传地址
        axios.defaults.headers.common['Authorization'] = 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjVhYzc3MDQxLTE3NGItNDEwZC1hOTJlLTVkYzU0YmRhMjllNiIsInVzZXJuYW1lIjoiYWRtaW4ifQ.GhdthjLmw4NP2WV2owYQS70tacRM-pX7NqI7Mo0_j_hatiqtSrqAr0RJC40osRETiQo_dacZcvNqATLsJHL77A'
        let result = await axios.post('https://zxc.test.cn/file/upload', formData)
         // 插入到富文本编辑器中,主意这里的三个参数都是必填的,要不然控制台报错:typeError: Cannot read properties of undefined (reading 'replace')
        insertFn(result.data.data.url, result.data.data.name, result.data.data.name)
      }
    }
  }
}
// 组件销毁时,也及时销毁编辑器
onBeforeUnmount(() => {
    const editor = editorRef.value
    if (editor == null) return
    editor.destroy()
})
const handleCreated = (editor) => {
  editorRef.value = editor // 创建富文本编辑器
}
const handleChange = (info) => {
  // info.children 数组包含了数据类型和内容,valueHtml.value内容的html格式
  emits('getEditorContent', info.children, valueHtml.value)
}
watch(()=>props.initValue, (value) => {  // 父组件获取初始值
  valueHtml.value = value
})
</script>

3、使用

父组件
<wang-editor :initValue="form.baseInfo.descInfo" @getEditorContent="onEditorChange"></wang-editor>
import WangEditor from '@/components/WangEditor'
const onEditorChange = (arr, html) => {
    console.log(arr, html)
}

以上就是vue3使用wangeditor封装和自定义上传文件官方教程的详细内容,更多关于vue3 wangeditor封装上传文件的资料请关注脚本之家其它相关文章!

相关文章

  • vue+webpack中配置ESLint

    vue+webpack中配置ESLint

    这篇文章主要介绍了vue+webpack中配置ESLint,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • el-form-item prop属性动态绑定不生效问题及解决

    el-form-item prop属性动态绑定不生效问题及解决

    这篇文章主要介绍了el-form-item prop属性动态绑定不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • 基于vue封装一个带眼睛的密码子组件

    基于vue封装一个带眼睛的密码子组件

    这篇文章给大家介绍了基于vue封装一个带眼睛的密码子组件的方法,文章中有详细的代码讲解,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-09-09
  • vant steps流程图的图标使用slot自定义方式

    vant steps流程图的图标使用slot自定义方式

    这篇文章主要介绍了vant steps流程图的图标使用slot自定义方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • vue3中$refs的基本使用方法

    vue3中$refs的基本使用方法

    在Vue中一般很少会用到直接操作DOM,但不可避免有时候需要用到,这时我们可以通过ref和$refs这两个来实现,下面这篇文章主要给大家介绍了关于vue3中$refs的基本使用方法,需要的朋友可以参考下
    2022-03-03
  • Vue开发中出现Loading Chunk Failed的问题解决

    Vue开发中出现Loading Chunk Failed的问题解决

    本文主要介绍了Vue开发中出现Loading Chunk Failed的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • Vue 组件化基本使用详情

    Vue 组件化基本使用详情

    这篇文章主要给大家分享的是Vue 组件化基本使用,所谓组件化,就是把页面拆分成多个组件,每个组件依赖的 CSS、JS、模板、图片等资源放在一起开发和维护。 因为组件是资源独立的,所以组件在系统内部可复用,组件和组件之间可以嵌套,下面来看文章学习内容吧
    2021-10-10
  • 详解Vue3的七种组件通信方式

    详解Vue3的七种组件通信方式

    本篇文章将详解介绍Vue3中如下七种组件通信方式:props、emit、v-model、refs、provide/inject、eventBus、vuex/pinia(状态管理工具)。感兴趣的可以了解一下
    2022-02-02
  • vue如何将base64流数据转成pdf文件并在新页面打开

    vue如何将base64流数据转成pdf文件并在新页面打开

    这篇文章主要介绍了vue如何将base64流数据转成pdf文件并在新页面打开问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • 一文带你简单理解Vue的data为何只能是函数

    一文带你简单理解Vue的data为何只能是函数

    如果data是一个函数的话,这样每复用一次组件,就会返回一份新的data,下面这篇文章主要给大家介绍了关于简单理解Vue的data为啥只能是函数的相关资料,需要的朋友可以参考下
    2022-10-10

最新评论