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

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)
    }
  }
}
// 注册ImageFormat
Quill.register(ImageFormat, true)

内容展示问题

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

import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'

// 表情css
import '@/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.cn7a3266bc937101976fe975362b56fd38.png给个「在看」,是对我最大的支持e539509becce41823e032c3666d56784.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二元函数图像生成器_GAN生成图像综述

点击上方“CVer”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达作者&#xff1a;YTimo(PKU EECS) 研究方向&#xff1a;深度学习&#xff0c;计算机视觉本文转载自&#xff1a;SIGAI摘要生成对抗网络(Generative adversarial network, GAN)…

设计模式之禅读书笔记

》设计原则《 》Single Responsibility Principle&#xff08;单一职责原则&#xff09;类只有一个修改的原因。 ●类的复杂性降低&#xff0c;实现什么职责都有明确的定义。 ●可读性高 ●可维护性高 ●变更引起的风险降低。 PS&#xff1a;基本不可能实现 》里氏替换原则&…

mysql mysql_set_charset_SQL注入攻击之 mysql_set_charset [转]

本文转载地址&#xff1a;http://hi.baidu.com/cuttinger/blog/item/e9a93901934755147bec2cb0.html1。老话题&#xff0c;mysql_real_escape_string单引号&#xff0c;大多数情况下&#xff0c;防止sql注入攻击足够了。$mysql mysql_connect("host","user&quo…

idea导入maven项目依赖报错_解决Maven依赖冲突的好帮手,这款IDEA插件了解一下?

1、何为依赖冲突Maven是个很好用的依赖管理工具&#xff0c;但是再好的东西也不是完美的。Maven的依赖机制会导致Jar包的冲突。举个例子&#xff0c;现在你的项目中&#xff0c;使用了两个Jar包&#xff0c;分别是A和B。现在A需要依赖另一个Jar包C&#xff0c;B也需要依赖C。但…

java线程创建方式_Java创建线程安全的方法

原文链接 译者&#xff1a;秦建平 校对&#xff1a;方腾飞首先来看一个问题&#xff1a;下面这个方法是线程安全的吗&#xff1f;如何才能让这个方法变成线程安全的&#xff1f;public class MyCount {private static int counter 0;public static int getCount(){return coun…

win7 能下node什么版本_微软从未公开的win10版本,3GB+极度精简,老爷机有救了

在windows家族中&#xff0c;最好用的就是win7和XP系统。堪称经典&#xff0c;而且还是发展最成功的系统版本。前几天韩博士也发布一篇关于XP系统的文章&#xff0c;评论区引发极大争论。大家众说纷纭&#xff0c;觉得XP系统是顺畅&#xff0c;但是很多软件硬件都不支持&#x…

【Swift学习】Swift编程之旅(一)

学习一门新语言最经典的例子就是输出“Hello World&#xff01;” print("Hello World!")  swift就是这样来输出的。 如果你使用过其他语言&#xff0c;那么看上去是非常的熟悉吧。但比一些c要简单的多吧 1、不需要导入一些单独的库&#xff0c;比如输入/输出或字符…

孔夫子二手书采集

文章目录 项目演示软件采集单本数据网页搜索数据对比 使用场景概述部分核心逻辑Vb工程图数据导入与读取下拉框选择参数设置线程 使用方法下载软件授权导入文件预览处理后的数据 项目结构附件说明 项目演示 操作视频详见演示视频&#xff0c;以下为图文演示 软件采集单本数据 …

为什么用redis做缓存而不是mybatis自带的缓存_如何用Java设计一个本地缓存,涨姿势了...

最近在看Mybatis的源码&#xff0c;刚好看到缓存这一块&#xff0c;Mybatis提供了一级缓存和二级缓存&#xff1b;一级缓存相对来说比较简单&#xff0c;功能比较齐全的是二级缓存&#xff0c;基本上满足了一个缓存该有的功能。当然如果拿来和专门的缓存框架如ehcache来对比可能…

process 类 java_编写可执行jar——java的Process类的使用(二)

你知道怎么在控制台使用ping吗&#xff1f;那你知道怎么在java中使用ping吗&#xff1f;1.批处理文件批处理文件大家一定不陌生。接触最多的应该就是tomcat中的start.bat或者start.sh了。bat是在windows环境下运行的批处理文件&#xff0c;sh则是linux的shell脚本。2.adb指令安…

2782: [HNOI2006]最短母串

2782: [HNOI2006]最短母串 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 3 Solved: 2[Submit][Status][Web Board]Description 给定n个字符串&#xff08;S1,S2,„,Sn&#xff09;&#xff0c;要求找到一个最短的字符串T&#xff0c;使得这n个字符串&#xff08;S1,S2,„,…

c java 内部类_java程序中能否在内部类当中再定义一个内部类?

展开全部我被你的想62616964757a686964616fe78988e69d8331333363386664法震撼了,哈哈.亏你想的出来...这么弄代码不好理解,Java看起来醒目,也是Java中的一个规范!可以吗?必须可以..看代码演示...声明下,我也第一次,多次嵌套,看你想法后去试验下是可行的我用的两种办法!不多说看…

数据库分区分表以及读写分离

谈谈怎么实现Oracle数据库分区表 Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法&#xff0c;做手头的项目以前&#xff0c;只聆听过分区的大名&#xff0c;感觉特神秘&#xff0c;看见某某高手在讨论会上夸夸其谈时&#xff0c;真是骂自己学艺不精&#x…

JSP Workshop

http://www.cnblogs.com/ITtangtang/p/4126395.html 发现http://www.tutorialspoint.com/里的资料很全也很不错啊&#xff01; 资料&#xff1a;http://www.tutorialspoint.com/jsp/jsp_tutorial.pdf 另外&#xff0c;http://www.runoob.com/jsp/jsp-tutorial.html 中关于JSP…

h5页面不可 移动_H5营销|为什么H5适合于微信营销

随着互联网技术的不断发展&#xff0c;更新在移动互联网时代&#xff0c;网络营销也开始越来越新颖化&#xff0c;而微信H5就是其中的佼佼者。它的出现满足了用户视觉上的审美要求&#xff0c;并且可以使营销方式变得更加的美观整洁&#xff0c;那么这里就有一个问题。为什么微…

亚太地区数学建模优秀论文_数学建模美赛强势来袭!

01美赛&#xff0c;即美国大学生数学建模竞赛(MCM/ICM)又要来啦&#xff01;赛题内容涉及经济、管理、环境、资源、生态、医学、安全、未来科技等众多领域。竞赛要求三人(本科生)为一组&#xff0c;在四天时间内&#xff0c;就指定的问题完成从建立模型、求解、验证到论文撰写的…

《软件调试》读书笔记:第13章 硬错误和蓝屏

会话管理器进程SMSS.exe是系统启动后的第一个用户态进程&#xff0c;负责启动和监护windows子系统进程&#xff1a;CSRSS.exe和登陆管理进程&#xff1a;WinLogonSMSS.exe从注册表中查询子系统exe文件的位置&#xff0c;并且启动它 CSRSS是windows子系统进程&#xff0c;自NT4以…

信息安全技术网络安全等级保护定级指南_行业标准 |报业网络安全等级保护定级参考指南V2.0发布,明确保护对象、定级要求...

近期&#xff0c;中国新闻技术工作者联合会正式发布《报业网络安全等级保护定级参考指南V2.0》。该指南由中国新闻技术工作者联合会组织网络安全领域的专家、报业技术专家以及业务专家经过多次调研、学习、探讨后&#xff0c;在原《报业网络安全等级保护定级参考指南V1.0》的基…

数学作图工具_科研论文作图系列-从PPT到AI (一)

导语&#xff1a;之前的推送中&#xff0c;小编给大家介绍过几款科研作图软件&#xff0c;包括统计分析软件Origin和Prism&#xff0c;图像处理软件ImageJ等等。从本期开始&#xff0c;小编将和大家一起继续学习科研论文作图。重点介绍图像的处理和排版&#xff0c;用到的工具主…

优启通怎么重装系统win10_重装系统失败?小编教你安全给神舟战神GX9 Pro重装win10系统方法...

神舟战神GX9 Pro 上市于2016年1月&#xff0c;虽然现在已经停产&#xff0c;但是还是有不少用户依旧十分喜爱这款笔记本。这款笔记本的性能完全对得起它的售价&#xff0c;很多用户都反馈其比外星人电脑要好。对于爱玩游戏的用户而言&#xff0c;对它17.3英寸的显示屏简直欲罢不…