当前位置:   article > 正文

html富文本编辑器插件_vue中使用vuequilleditor富文本编辑器

htmldocx插件配合quill-editor
d8867d6706f03fb7039f8db538a643d6.gif 点击上方“ 小姚同学技术栈 ”快速关注我哟!

f493cd9929bf144284fdf4083ef2e515.png

vue-quill-editor 是一个基于 quill 、适用于 vue 的富文本编辑器开源项目,支持服务端渲染和单页应用。 目前项目热度还算可以,如果不考虑使用 markdownvue-quill-editor 是一个比较好的选择。

本篇文章将介绍在vue项目中如何使用vue-quill-editor富文本编辑器并实现图片的自定义上传、图片的resize以及emoji表情。笔者在编写项目的过程中遇到的一些问题以及如何解决也会在文中说明。

功能

- 基本功能- 自定义图片上传- 图片大小及居中- emoji表情

4211a09dc3321ade3e57715a9622c3f7.png

df19c76ffe4c9c8abf481ff10ce8e8c2.png

494939f94a3427a9094b54fcf2c5ffb6.png

项目依赖

"vue""2.6.10","vue-router""3.0.6","vue-quill-editor""^3.0.6","quill-image-resize-module""^3.0.0"

核心代码

import Quill from 'quill'import { toolbarOptions, ImageFormat } from './config.js'import ImageResize from 'quill-image-resize-module'import '@/assets/quill-emoji/quill-emoji.js'Quill.register('modules/imageResize', ImageResize)Quill.register(ImageFormat, true)import { imgUpload } from '@/api/file.js'      data() {    return {      content'',      editorOption: {        modules: {          toolbar: {            container: toolbarOptions,            handlers: {              // 表情符              emoji: function() {},              image: function(value) {                if (value) {                  // 点击事件转移到按钮                  document.querySelector('#toolbar-img').click()                } else {                  this.quill.format('image'false)                }              }            }          },          imageResize: {            modules: ['Resize''DisplaySize''Toolbar']          },          'emoji-toolbar'true,          'emoji-shortname'true        },        placeholder: '请输入内容......'      }    }  }

引入image-resize的'imports' of undefined问题

引入image-resize时会报错,报错提示如下。

97d309ffc9d32941127b72a3bafc8995.png

这时候需要修改webpack配置,vue-cli2vue-cli3webpack配置有点区别。vue-cli3的找到到vue.config文件,然后导入webpack,并在chainWebpack下加入配置。

const webpack = require('webpack')chainWebpack(config) {    // 解决quill-image-resize-module导入问题    config.plugin('provide').use(webpack.ProvidePlugin, [{          'window.Quill''quill'    }])}

vue-cli2webpack配置需要修改两个文件(开发环境和生产环境),分别找到webpack.dev.confwebpack.prod.conf,然后分别在plugins加入配置。

plugins: [    // 解决quill-image-resize-module导入问题    new webpack.ProvidePlugin({      'window.Quill''quill/dist/quill.js',      'Quill''quill/dist/quill.js'    })  ]

图片样式在编辑器改动的不保存问题

引入图片的resize插件后可以在编辑器中对图片进行大小以及图片是否居中等调整,有一个问题,在编辑器中样式生效,但样式内容不会存到内容content里面,这时候需要加一些配置。

class ImageFormat extends BaseImageFormat {  static formats(domNode) {    return ImageFormatAttributesList.reduce(function(formats, attribute) {      if (domNode.hasAttribute(attribute)) {        formats[attribute] = domNode.getAttribute(attribute)      }      return formats    }, {})  }  format(name, value) {    if (ImageFormatAttributesList.indexOf(name) > -1) {      if (value) {        this.domNode.setAttribute(name, value)      } else {        this.domNode.removeAttribute(name)      }    } else {      super.format(name, value)    }  }}// 注册ImageFormatQuill.register(ImageFormat, true)

内容展示问题

编辑器编辑的内容会转换为html富文本,但由于vue-quill-editor实现的富文本内容的样式不是直接写在style里,而是通过class控制样式的,所以富文本内容展示时需要引入样式文件。

import 'quill/dist/quill.core.css'import 'quill/dist/quill.snow.css'// 表情cssimport '@/assets/quill-emoji/quill-emoji.css'

引入样式文件后,展示的内容的外面还需要包裹几个带样式的div

<div class="quill-editor">  <div class="ql-container ql-snow">    <div class="ql-editor" v-html="content" />  div>div>

其他如小程序需要展示富文本内容,把对应的样式拷贝过去,做同样的修改即可。

本demo项目地址

https://github.com/copoile/quill-editor-demo.git

253fd464d2857bfbb1fa4809619a1e7d.gif

a11d2a282fde6391518bcd4ec8b1d808.png扫码关注我微信搜一搜 “ 小姚同学技术栈”https://www.poile.cn 7a3266bc937101976fe975362b56fd38.png 给个 「在看」 , 是对我最大的支持 e539509becce41823e032c3666d56784.png
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/91213
推荐阅读
相关标签
  

闽ICP备14008679号