首页 > 其他分享 >如何在Vue项目中引入富文本编辑器(wang-enduit)

如何在Vue项目中引入富文本编辑器(wang-enduit)

时间:2023-09-05 21:01:38浏览次数:47  
标签:文本编辑 Vue const wang base64 editor var 上传 blob

介绍

官网 https://www.wangeditor.com/

安装

yarn add @wangeditor/editor
npm install @wangeditor/editor --save
yarn add @wangeditor/editor-for-vue@next
npm install @wangeditor/editor-for-vue@next --save

使用

自定义上传图片,先转base64,转blob,上传服务器

<div id="wangeditor">
  <div ref="editorElem" style="text-align:left;" />
</div>
import E from 'wangeditor'
import axios from 'axios'

// 初始化编辑器
updated() {
    this.setEditor()
},
// 函数
setEditor(){
    const me = this
    this.editor = new E(this.$refs.editorElem)
    // 自定义上传图片
    this.editor.config.customUploadImg = function(resultFiles, insertImgFn) {
        // resultFiles 是 input 中选中的文件列表
        // insertImgFn 是获取图片 url 后,插入到编辑器的方法
        me.filesToBase64(resultFiles)
    }
    
    this.editor.config.menus = [
      // 菜单配置
        'head', // 标题
        'bold', // 粗体
        'italic', // 斜体
        'underline', // 下划线
        'link', // 插入链接
        'image', // 插入图片
        'undo', // 撤销
        'redo' // 重复
      ]
      this.editor.create()
}

//   转base64
filesToBase64(files) {
  const _this = this
  files.map(item => {
    console.log(item)
    var reader = new FileReader()
    reader.onload = function(e) {
      _this.uploadImg(e.target.result, item)
    }
    // 传入一个参数对象即可得到基于该参数对象的文本内容
    reader.readAsDataURL(item)
  })
},


// base64转blob
Base64toBlob({ base64, success }) {
  var arr = base64.split(',')
  var mime = arr[0].match(/:(.*?);/)[1]
  var bstr = atob(arr[1])
  var n = bstr.length
  var u8arr = new Uint8Array(n)
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n)
  }
  const blob = new Blob([u8arr], { type: mime })
  success(blob)
},


// 上传图片
uploadImg(base64, file) {
  const _this = this
  // 自己的上传地址
  const uploadUrl = process.env.VUE_APP_BASE_API_UNIVERSAL + '/api/qiniu/upload'
  const formData = new FormData()
  this.Base64toBlob({
    base64,
    success(blob) {
      formData.append('file', blob, file.name)
      formData.append('open', true)
      // 调用axios上传
      const config = {
        headers: { 'Content-Type': 'multipart/form-data' }
      }
      axios.post(uploadUrl, formData, config).then((res) => {
        // 根据自己的后台逻辑进行判断
        if (res.data.code === 0) {
          _this.$message.success('图片上传成功!')
          // 上传图片,返回结果,将图片插入到编辑器中
          _this.editor.cmd.do(
            'insertHtml',
            '<img src="' + res.data.result + '" style="max-width:100%;"/>'
          )
        } else {
          _this.$message({
            message: '文件服务异常,请联系管理员!',
            type: 'error'
          })
        }
      })
    }
  })
}

image

标签:文本编辑,Vue,const,wang,base64,editor,var,上传,blob
From: https://www.cnblogs.com/guozhiqiang/p/17680757.html

相关文章

  • 【坑】VUE中动态数据使用 wow.js 没效果的问题
    一般来说正常使用都是在mounted函数中mounted(){this.$nextTick(()=>{this.$wow.init()})}这样如果是死数据是可以正常出现效果的但是如果是请求回来的数据是没有效果的需要改一下生成时机  此处的newList即为请求的数据watch:{newsl......
  • Vue3实现批量打印二维码与条形码
    (二维码与条形码在vue3中的使用)欢迎阅览本篇文章这篇文章是我在工作途中对批量生成二维码的一些见解,例如vue-qr(二维码)与jsbarcode(条形码)在vxe-table表格中的使用,二维码与条形码的批量生成与打印(打印时一页一个码)等。注意!本篇文章的所有代码均使用setup语法糖与TypeScript,请确保......
  • vue3如何监听 props 的变化?
    背景实际开发过程中,当需要通过watch 监听传入的props的某个值的变化,来动态改变组件内部的样式,实现方式如下:exportdefault{name:'countdown',props:{showBox:{type:Boolean,required:true,default:false},},setup(prop......
  • vue语言中的keep-alive的作用
    在前端Vue语言中,keep-alive是一个抽象组件,用于在Vue组件树中缓存动态组件。它可以有效地保留组件的状态,以避免在组件之间切换时重复渲染和销毁组件,从而提高性能。使用keep-alive包裹动态组件后,当动态组件被切换时,它将会被缓存,而不是被销毁。这样,组件的状态、DOM以及所有的子组件......
  • vue项目新建 端口更改
    vue项目新建步骤vite创建vue3项目(最简单):在需要的文件目录中输入cmd命令,打开命令窗口,在当前文件目录下创建项目(直接打开命令窗口,默认C盘创建项目)第一步:npminitvite-appvue-code//code为项目名第二步:cd./vue-code//进入项目第三步:npminstall//安装依赖包第四......
  • vue3.0 el-table 动态合并单元格
    <el-tablev-resize:34style="margin:10px010px":data="tableData":header-cell-style="{background:'#F6F6F6',height:'10px','text-align':'center'}":......
  • antd限制开始时间与结束时间范围是30天,并不能选择当前日期之后的日期 vue3(默认展示近7
    <a-range-picker:value="hackValue||dateArr":disabled-date="disabledDate"style="width:240px"separator="~":allow-cl......
  • Vue3带来的新变化
    Vue3带来的新变化性能提升首次渲染更快diff算法更快内存占用更少打包体积变小更好的Typescript支持CompositionAPI (重点)在使用vue2.x版本开发较复杂的组件时,逻辑难以复用,组合式api的出现可以解决此类问题相关阅读:Vue3中文文档 https://vue3js.cn/docs/zh/......
  • Vue2 中vuex和store基本用法——取值之this.$store.getters.getValue & 修改值之this.
        参考:https://blog.csdn.net/weixin_44867717/article/details/124133304 项目实例:      ......
  • 从零开始一个vue3前端项目day04-头部导航篇
    在实际开发项目中通常会把头部导航栏写成一个通用组件,这里来具体说一下实现思路1:front-header组件就是我们的头部导航栏,路由我们已经配置好了,把每个导航的首页路径,配置成navList(包含name,path),这样就通过遍历navList就能写出一个首页导航组件 2:导航的选中状态实现,不仅仅是切......