牛叔叔 的笔记

好好学习

2021-04-08 15:49

在Vue+ElementUI项目中使用富文本编辑器vue-quill-editor,并实现图片上传

牛叔叔

WEB前端

(2302)

(0)

收藏

blog

在开发Vue+ElementUI项目中,需要用到富文本编辑器,挑选了一下,最终选定vue-quill-editor。现将vue-quill-editor使用分享给大家。


1、安装

npm install quill


2、引入

import { quillEditor } from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'


需要在components中引入组件:

  components: {
    quillEditor
  },


3、使用

<quill-editor ref="text" v-model="form.info" class="myQuillEditor"  />


此时页面即已经出现富文本编辑器:

微信图片_20210408154148.png

但是其中的图片上传,是base64,这个可能不是特别合适,经过到官网查询,可以进一步安装扩展quill-image-extend-module实现本地上传到服务器图片。

quill-image-extend-module能实现以下功能:

  • 提供图片上传到服务器的功能

  • 复制插入

  • 拖拽插入

  • 显示上传进度

  • 显示上传成功或者失败

  • 支持与其他模块一起使用(例如调整图片大小)


4、安装quill-image-extend-module

npm install quill-image-extend-module --save-dev

引入:

  import {quillEditor, Quill} from 'vue-quill-editor'
  import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module'

  Quill.register('modules/ImageExtend', ImageExtend)

实例代码:

<template>
  <div class="quill-wrap">
    <quill-editor
      v-model="content"
      ref="myQuillEditor"
      :options="editorOption"
    >
    </quill-editor>
  </div></template><script>
  import {quillEditor, Quill} from 'vue-quill-editor'
  import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module'

  Quill.register('modules/ImageExtend', ImageExtend)
  export default {
    components: {quillEditor},
    data() {
      return {
       content: '',
        // 富文本框参数设置
        editorOption: {  
          modules: {
            ImageExtend: {
              loading: true,
              name: 'img',
              action: updateUrl,
              response: (res) => {
                return res.info              }
            },
            toolbar: {
              container: container,
              handlers: {
                'image': function () {
                  QuillWatch.emit(this.quill.id)
                }
              }
            }
          }
        }
      }
    }
  }</script>

quill-image-extend-module 的所有可配置项

 editorOption: {
                     modules: {
                         ImageExtend: {  // 如果不作设置,即{}  则依然开启复制粘贴功能且以base64插入 
                             name: 'img',  // 图片参数名
                             size: 3,  // 可选参数 图片大小,单位为M,1M = 1024kb
                             action: updateUrl,  // 服务器地址, 如果action为空,则采用base64插入图片
                             // response 为一个函数用来获取服务器返回的具体图片地址
                             // 例如服务器返回{code: 200; data:{ url: 'baidu.com'}}
                             // 则 return res.data.url
                             response: (res) => {
                                 return res.info                             },
                             headers: (xhr) => {
                             // xhr.setRequestHeader('myHeader','myValue')
                             },  // 可选参数 设置请求头部
                             sizeError: () => {},  // 图片超过大小的回调
                             start: () => {},  // 可选参数 自定义开始上传触发事件
                             end: () => {},  // 可选参数 自定义上传结束触发的事件,无论成功或者失败
                             error: () => {},  // 可选参数 上传失败触发的事件
                             success: () => {},  // 可选参数  上传成功触发的事件
                             change: (xhr, formData) => {
                             // xhr.setRequestHeader('myHeader','myValue')
                             // formData.append('token', 'myToken')
                             } // 可选参数 每次选择图片触发,也可用来设置头部,但比headers多了一个参数,可设置formData
                         },
                         toolbar: {  // 如果不上传图片到服务器,此处不必配置
                             container: container,  // container为工具栏,此次引入了全部工具栏,也可自行配置
                             handlers: {
                                 'image': function () {  // 劫持原来的图片点击按钮事件
                                     QuillWatch.emit(this.quill.id)
                                 }
                             }
                         }
                     }
                 }


关于上传图片服务器返回值问题:

由于不同的用户的服务器返回的数据格式不尽相同

因此
在配置中,你必须如下操作

 // 你必须把返回的数据中所包含的图片地址 return 回去
 respnse: (res) => {
    return res.info  // 这里切记要return回你的图片地址
 }

比如你的服务器返回的成功数据为

{code: 200,starus: true,result: {
    img: 'http://placehold.it/100x100' // 服务器返回的数据中的图片的地址
 }}

那么你应该在参数中写为:

 // 你必须把返回的数据中所包含的图片地址 return 回去
 respnse: (res) => {
    return res.result.img  // 这里切记要return回你的图片地址
 }


0条评论

点击登录参与评论