vue3项目引入VueQuill富文本编辑器(成功)及 quill-image-uploader 图像模块(未成功)

tip:重点解释都写在代码注释里了,方便理解,所以看起来比较密集

富文本基本使用

项目文件夹路径安装依赖
npm install @vueup/vue-quill@latest --save

全局注册:main.js

// main.js// 自己项目的一些配置(只放了主要的)
import { createApp } from "vue";
import App from "./App.vue";
import router from "./routers/index.js";
// 别的一些配置(省略...)// 引入 quill 富文本编辑器
import { QuillEditor } from "@vueup/vue-quill";
import "@vueup/vue-quill/dist/vue-quill.snow.css"; // 对应的css样式【必须】// 实例化App后挂载到根组件#app上
createApp(App).use(router).component("QuillEditor", QuillEditor) // 注入富文本编辑器组件.mount("#app");

使用:在我的某个组件中EditArticle.vue使用,我的需求是放在表单中作为表单项使用

<el-formref="ruleFormRef":model="updateForm"class="updateForm"label-position="top"size="default"status-iconstyle="font-weight: bold; width: 60%; margin: 0 auto"
><!-- 省略别的表单项...和富文本使用没关系 --><el-form-item label="资讯内容" prop="content"><!-- 这是我一开始用输入框的写法,不用在意 --><!-- <el-input v-model="updateForm.content" /> --><!-- 【敲黑板!!!这里有重点!!!】1. 设置一个 div 控制工具栏的宽度2. theme是主题样式,有两种好像,这是全局注册时引入的那个css样式,直接使用3. toolbar是工具栏的配置,可以用官方提供的选项essential、minimal、full和""使用默认选项(使用就是 toolbar="essential",不用v-model动态绑定);我这里按自己的需求配置了一下(放在我的公共工具文件里了,然后直接在本文件下导入使用即可)4. contentType是官方提供的一个Api props,三种类型 "delta"(默认) | "html" | "text",我理解的该项的作用就是让你富文本编辑器的内容以什么方式渲染,我这里用的是html,也就是直接带格式显示(我不设置这一选项,内容就无法显示)5. style 设置了最小高度,否则没内容时就会很难看6. :content 是官方提供的动态绑定数据的写法,是固定的哈【重要】,我一开始没看到官方文档的这个选项,导致我内容渲染不出来,值就是你自己要显示的那个值,绑上去就行--><div style="width: 100%"><!-- 根据官方文档,全局注册后直接引用 --><QuillEditortheme="snow":toolbar="toolbarOptions"contentType="html"style="min-height: 200px":content="updateForm.content"/></div></el-form-item>
</el-card>

还是上面这个EditArticle.vue中,我的js代码(使用setup语法糖)

<script setup>
// 引入我配置的工具栏配置(下面附有具体配置)
import { toolbarOptions } from "@/utils/util";
</script>

这是我的公共工具文件util.js文件

/*** quill 富文本工具栏配置*/
export const toolbarOptions = [  // export导出 才能在别的组件文件里导入 然后引用
// 每一个 [] 是一个分组的意思,没啥影响,就是页面组与组直接会有一点间隔[{ header: [1, 2, 3, 4, 5, 6, false] }],["bold", "italic", "underline", "strike"],["link", "image"],[{ script: "sub" }, { script: "super" }],
];

好,到这里应该就是可以显示一个基本的富文本编辑器了,存到数据库里也是按照 html 标签 + 纯文本内容 存的

笔者这里引入组件后,浏览器会有一个警告:应该是兼容性问题?不太清楚,配置反正是跟着官方来的
[Deprecation] Listener added for a ‘DOMNodeInserted’ mutation event. This event type is deprecated, and will be removed from this browser very soon. Usage of this event listener will cause performance issues today, and represents a large risk of future site breakage. Consider using MutationObserver instead. See https://chromestatus.com/feature/5083947249172480 for more information.

升级需求,插入图片

按照上述配置直接插入图片,我发现存的是很长一串字符串,术语就是base64编码格式,官网也说了这个问题:

在这里插入图片描述

接着就是跟着官方给的文档,按照自己的需求配一下,即图片在富文本中引用时,传到服务器,将返回的链接地址存到数据库

我看很多文章都是借助了elementupload上传组件,我个人不太想使用这种方式。若是项目没有使用该组件库呢,所以决定还是用官方文档提供的方法

依旧是项目文件夹路径下安装依赖
npm install quill-image-uploader --save

我这里依旧使用全局注册
有坑,如果你要用这种方式,请看完这部分内容再决定用不用!目前笔者没有成功,本文只是记录一下使用该工具的配置过程,若是后面解决了,会同步到本文里)

全局注册:main.js 在上面配置的基础上加入以下代码

import { createApp } from "vue";
import App from "./App.vue";
import router from "./routers/index.js";
// 别的一些配置(省略...)// 引入 quill 富文本编辑器
import { QuillEditor } from "@vueup/vue-quill";
import "@vueup/vue-quill/dist/vue-quill.snow.css"; // 对应的css样式【必须】// 【看这里!!!新引入的模块!!!】 引入 Quill 富文本编辑器 图片模块
import ImageUploader from "quill-image-uploader";
import "quill-image-uploader/dist/quill.imageUploader.min.css"; // 官网没说这里,这是我看该模块的github上的issue上有人提到的(有兴趣的可以去看看:https://github.com/NoelOConnell/quill-image-uploader/issues)
import { postUploadFile } from "@/api/common"; // 这是我自己的上传文件的接口,在api文件中已经定义好了,这里直接导入使用即可(有需要的话可以找我看一下配置,用的axios二次封装,后端是springboot)
// 官网示例是直接发axios请求,若你有不同的请求需求,可以搜一下相关文章,我这里不做赘述// 此处不需要使用Quill.register再注册了,会提示重复注册// 全局配置 modules 这里可以抽取成单独的文件 笔者不做抽取
const modules = {name: "imageUploader",module: ImageUploader,options: {upload: (file) => {return new Promise(async (resolve, reject) => {const formData = new FormData();formData.append("file", file);// console.log(formData.get("file")); // 通过get方法可以查看到文件对象的信息;注意这里直接打印formData是看不到内容的try {const res = await postUploadFile(formData);	// debugger 时发现执行到这句出现报错,但是图片上传阿里云是没问题的,返回的链接也正常// resolve(res.data)return res.data;} catch (error) {reject("上传失败");console.error("Error:", error);}});},},
};// 将App create()实例化后挂载到根组件#app上
createApp(App).use(router).component("QuillEditor", QuillEditor) // 注入富文本编辑器组件.provide("$modules", modules) // 使用provide导出模块配置【看这里!!!新增的!!!】.mount("#app");

回到EditArticle.vue
在js中先注入该配置

import { inject } from "vue";const modules = inject("$modules");

然后在使用富文本编辑器处加入::modules 配置

<div style="width: 100%"><QuillEditortheme="snow":toolbar="toolbarOptions"contentType="html"style="min-height: 200px":content="updateForm.content":modules="modules"/>
</div>

按道理来说,应该可以成功了,但是并没有…先记录一下,笔者找找别的办法

问题

图片上传服务器是成功的,服务器能够返回图片链接,但是 imageUploader 模块无法正常显示图片并报错(2个)

报错1: Unable to create imageBlot blot

报错2:TypeError: Cannot read properties of null (reading ‘ops’)
解决报错2,使用 return 不使用 resolve(res.data) 能解决报错

弄了一晚上,也没解决,这两个问题可能是兼容性导致的,源码的issue上也有人提到了,但是还没解决

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

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

相关文章

注册表获取autoCAD安装位置

注意事项 注意&#xff1a;①64位操作系统注册表会重定向&#xff0c;RegOpenKeyEx第4个参数得加上KEY_WOW64_64KEY&#xff1b;②RegOpenKeyEx遍历子项时注意第2和第4参数&#xff0c;参考图&#xff1a; ③RegQueryValueEx同样得注意第6参数 完整代码 std::unordered_map…

基于ssm+vue+Mysql的药源购物网站

开发语言&#xff1a;Java框架&#xff1a;ssmJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;Maven3.…

Cokejogo巴西 电子游戏源码 游戏网站源码 电子游戏合集 电子游戏软件下载 游戏源码(带安装教程)

Cokejogo巴西pg电子游戏源码/H5PC端 前端vue编译后后端PHP/修复图片资源失效 后端测试环境&#xff1a;Linux系统CentOS7.6、宝塔、PHP7.2、MySQL5.6&#xff0c;根目录public&#xff0c;伪静态thinkPHP&#xff0c;开启ssl证书 源码下载&#xff1a;https://download.csdn.n…

CUDA内存模型

核函数性能并不只与线程束的执行有关。 CUDA内存模型概述 GPU和CPU内存模型的主要区别是&#xff0c;CUDA编程模型能将内存层次结构更好地呈现给用户&#xff0c;能让我们显示的控制它的行为。 对程序员来说&#xff0c;一般有两种类型的存储器&#xff1a; 可编程的&#x…

YOLO系列改进,自研模块助力涨点

目录 一、原理 二、代码 三、添加到YOLOv5中 一、原理 论文地址:

企业职能部门定岗定编项目如何做?

某国家级高新技术开发区成立于上世纪90年代&#xff0c;位于南方某市&#xff0c;地处三省交界处&#xff0c;是直接由该省委省政府创办的全省首批高新技术开发区。该开发区面积达到300平方公里&#xff0c;辖区人口30万人。历经数十年发展&#xff0c;在省委省政府的高度重视下…

QT:核心控件-QWidget

文章目录 控件enableobjectNamegeometrysetWindowTitleopacitycursorFonttooltipstyleSheet 控件 什么是控件&#xff1f; 如上所示&#xff0c;就是控件&#xff0c;而本篇要做的就是对于这些控件挑选一些比较有用的常用的进行讲解分析 在QT的右侧&#xff0c;会有对应的空间…

unity制作app(1)--登录 注册 界面

把学到的知识投入到生产中反而是一件简单的事情&#xff01; 1.调整canvas的形状&#xff0c;这里和camera没有任何关系! overlay&#xff01; 2.既然自适应&#xff0c;空间按钮的位置比例就很重要了&#xff01; game窗口中新增720*1280的分辨率&#xff01; 3.再回到can…

【论文阅读】ViTAE:Vision transformer advanced by exploring intrinsic inductive bias

ViTAE:Vision transformer advanced by exploring intrinsic inductive bias 论文地址摘要&#xff1a;简介&#xff1a;3 方法论3.1 重温视觉变压器3.2 ViTAE3.3 缩减单元3.4 Normal cell3.5 模型细节 4 训练4.1 Implementation details4.2 Comparison with the state-of-the-…

Elasticsearch:理解近似最近邻 (ANN) 算法

作者&#xff1a;来自 Elastic Elastic Platform Team 如果你是在互联网出现之前长大的&#xff0c;你会记得找到新喜好并不总是那么容易。我们是在无意中听到收音机里的新乐队时发现他们的&#xff0c;是因为忘了换频道偶然看到一个新电视节目的&#xff0c;也是几乎完全依据游…

ClickHouse安装(成功安装)

1.下载安装包 下面通过阿里镜像&#xff08;https://mirrors.aliyun.com/clickhouse/rpm/lts/&#xff09;进行下载&#xff0c;下载哪里&#xff0c;自行指定。 # deb包下载使用如下4行 wget https://mirrors.aliyun.com/clickhouse/deb/pool/stable/clickhouse-client_22.8…

git 的迁移

现象是gitlab经常会挂掉&#xff0c;linux会显示磁盘空间不足&#xff0c;实际上&#xff0c;我们linux某个目录的空间是4T。这个空间应该是足够的。猜测是gitlab的安装目录不对导致的空间不足。 1、查找原因 用rpm 安装gitlab会有自己的目录&#xff0c;很多安装文件会在opt…

MySql 导出导入(备份还原)

1&#xff0c;导出备份 要导出MySQL数据库中的数据&#xff0c;使用mysqldump命令。假设要导出名为mydatabase的数据库到名为backup.sql的文件中&#xff1a; mysqldump -u 用户名 -p 数据库名 > backup.sql 参数说明&#xff1a; -u mysql用户名称 -p 执行后会要求输入…

【C++】学习笔记——string_4

文章目录 六、string类7. string类的模拟实现 未完待续 六、string类 7. string类的模拟实现 我们在上文简单实现了string类的构造函数。不知道大家有没有发现一个问题&#xff0c;我们在进行实现无参的构造函数时&#xff0c;初始化列表将 _str 初始化为 nullptr 了&#xf…

Unity LensFlare 入门

概述 在项目的制作过程中&#xff0c;太阳光的使用一定是不可缺少的部分&#xff0c;但是如果想实现真实太阳光眼睛看到的镜头炫光效果&#xff0c;那这部分的内容一定不要错过喔&#xff0c;接下来让我们来学习这部分的内容吧&#xff01; Hale(光环效果) Color&#xff1a;…

操作系统:线程

目录 前言&#xff1a; 1.线程 1.1.初识线程 1.2.“轻量化”进程 1.3.线程与进程 2.线程控制 2.1.pthread原生线程库 2.2.线程控制的接口 2.2.1.线程创建 2.2.线程退出|线程等待|线程分离|线程取消 2.3.pthread库的原理 2.4.语言和pthread库的关系 2.5.线程局部…

数据可视化宝典:Matplotlib图形实战

在数据分析领域&#xff0c;图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形&#xff0c;并附上相应的代码示例&#xff0c;可以当初matplotl…

模型智能体开发之metagpt-单智能体实践

需求分析 根据诉求完成函数代码的编写&#xff0c;并实现测试case&#xff0c;输出代码 代码实现 定义写代码的action action是动作的逻辑抽象&#xff0c;通过将预设的prompt传入llm&#xff0c;来获取输出&#xff0c;并对输出进行格式化 具体的实现如下 定义prompt模版 …

神经网络与深度学习--网络优化与正则化

文章目录 前言一、网络优化1.1网络结构多样性1.2高维变量的非凸优化1.鞍点2.平坦最小值3.局部最小解的等价性 1.3.改善方法 二、优化算法2.1小批量梯度下降法&#xff08;Min-Batch&#xff09;2.2批量大小选择2.3学习率调整1.学习率衰减&#xff08;学习率退火&#xff09;分段…

Android数据恢复软件快速比较:Android数据恢复的7最佳工具

您在 Android 设备上保留哪些类型的数据&#xff1f;如果您和大多数人一样&#xff0c;那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长&#xff0c;我们愿意打赌您拥有Android数据丢失的第一手经验。 幸运的是&#xff0c;我们也…