uniapp+vue3+ts H5端使用Quill富文本插件以及解决上传图片反显的问题

uniapp+vue3+ts H5端使用Quill富文本插件以及解决上传图片反显的问题

1.在项目中安装Quill

npm i quill@1.3.7

2.需要显示富文本的页面完整代码

<template><view><div ref="quillEditor" style="height: 65vh"></div></view>
</template>	 
<script setup lang="ts">
import { ref, onMounted, reactive } from 'vue'
import Quill from 'quill'
import 'quill/dist/quill.snow.css'const quillEditor = ref(null)
let quill: any = null
const toolbarOptions = ref([[{ header: [1, 2, 3, 4, 5, 6, false] }],['bold', 'italic', 'underline'], // toggled buttons['image'],[{ align: [] }]
])onMounted(() => {getQuill()
})
// 初始化编辑器
const getQuill = () => {quill = new Quill(quillEditor.value, {theme: 'snow',modules: {toolbar: toolbarOptions.value}})// 监听工具栏的图片按钮点击事件quill.getModule('toolbar').addHandler('image', handleImageUpload)
}
// 图片上传const uploadImage = async (filePath: string): Promise<string> => {try {const [uploadResult] = await uni.uploadFile({url: 'xxxxxxxxxxx', // 替换为实际的上传接口地址filePath,name: 'file',formData: {},})const response = JSON.parse(uploadResult.data)if (response.code === 200) {return response.data.url // 假设返回的数据中包含图片的完整 URL} else {throw new Error(response.message || '图片上传失败')}} catch (error) {console.error('上传图片出错:', error)throw error}}// 替换 Quill 默认的图片处理逻辑
const handleImageUpload = () => {uni.chooseImage({count: 1,sizeType: ['original', 'compressed'], // 原图或压缩图sourceType: ['album', 'camera'], // 相册或相机success: async (res) => {const filePath = res.tempFilePaths[0]try {const data: any = await uploadImage(filePath)const range = quill.getSelection()if (range) {quill.insertEmbed(range.index, 'image', data.absolute_path)}} catch (error) {uni.showToast({title: '图片上传失败',icon: 'none'})}},fail: (err) => {console.error('选择图片失败:', err)}})
}// 获取编辑器内容
const getContent = () => {if (quill) {const content = quill.root.innerHTMLform.answer_detail = contentconsole.log(content) // 这里可以获取到Quill编辑器的HTML内容}
}
</script>  

在这里插入图片描述

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

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

相关文章

QML —— 3种等待指示控件(附源码)

效果如下 说明 BusyIndicator应用于指示在加载内容或UI被阻止等待资源可用时的活动。BusyIndicator类似于一个不确定的ProgressBar。两者都可以用来指示背景活动。主要区别在于视觉效果,ProgressBar还可以显示具体的进度(当可以确定时)。由于视觉差异,繁忙指示器和不确定的…

数字后端零基础入门系列 | Innovus零基础LAB学习Day11(Function ECO流程)

###LAB 20 Engineering Change Orders (ECO) 这个章节的学习目标是学习数字IC后端实现innovus中的一种做function eco的flow。对于初学者&#xff0c;如果前面的lab还没掌握好的&#xff0c;可以直接跳过这节内容。有时间的同学&#xff0c;可以熟悉掌握下这个flow。 数字后端…

Swift从0开始学习 协议和扩展 day5

协议:定义行为的契约 协议类似于其他语言中的接口。它们定义了一组方法、属性或其他需求,供结构体、类、枚举等类型去遵循和实现。协议并不实现这些需求,而是作为一种约定或合同,确保实现协议的类型会遵循特定的行为。 协议的定义和遵循 在 Swift 中,使用 protocol 关键…

R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法

R语言绘图过程中遇到图例的图块中出现字符的解决方法 因为我遇到这个问题的时候没在网上找到合适的方法&#xff0c;找到个需要付费的&#xff0c;算了。也许是因为问的方式不同&#xff0c;问了半天AI也回答出来&#xff0c;莫名有些烦躁&#xff0c;打算对代码做个分析&…

云服务器部署WebSocket项目

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;其设计的目的是在Web浏览器和Web服务器之间进行实时通信&#xff08;实时Web&#xff09; WebSocket协议的优点包括&#xff1a; 1. 更高效的网络利用率&#xff1a;与HTTP相比&#xff0c;WebSocket的握手只…

二十:HTML Form表单提交时的协议格式

在Web开发中,HTML表单(form)是与用户交互的一个重要组件,常用于收集用户输入并将数据发送到服务器进行处理。HTML表单的提交是通过HTTP协议进行的,而表单的提交格式是由表单的method、action、enctype等属性决定的。在本文中,我们将详细探讨HTML表单在提交数据时的协议格…

数字反向输出

数字反向输出 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 小明听到广播里的数字后&#xff0c;总喜欢反着念给妈妈听。请聪明的你将小明听到的数字反向输出。 输入 输入为一个整型的四位数n 输出 …

libigl 邻接矩阵

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 libigl使用一种邻接矩阵来描述各个点之间的关系,这样做非常的直观,方便使用。 二、实现代码 #include <Eigen/Core> #include <Eigen/Geometry> #include <igl/read_triangle_mesh.h>

2024-11-19 kron积

若A[a11 a12; a21 a22]; B[b11 b12; b21 b22]; 则C[a11*b11 a12*b11 a21*b11 a22*b11; a11*b12 a12*b12 a21*b12 a22*b12; a11*b21 a12*b21 a21*b21 a22*b21; a11*b22 a12*b22 a21*b22 a22*b22] 用MATLAB实现 方法1&#xff1a; A [a11 a12; a21 a22]; B [b11 b12; b21 b22]…

Java多态的优势和弊端

1. public class text {public static void main(String[] args) {animal dnew dog();d.eat();// dog a (dog) d;//类似强制转换//a.lookhome();/* if(d instanceof dog){dog a(dog)d;a.lookhome();}else if(d instanceof cat){cat c(cat) d;c.work();}else{System.out.print…

Chrome 浏览器 131 版本开发者工具(DevTools)更新内容

Chrome 浏览器 131 版本开发者工具&#xff08;DevTools&#xff09;更新内容 一、使用 Gemini 调试 CSS Chrome DevTools 现在推出了一个新的实验性 AI 辅助面板&#xff0c;可以与 Gemini 聊天并获得帮助来调试 CSS。 在 Elements 面板中&#xff0c;右键点击一个元素并选…

按出生日期排序(结构体专题)

题目描述 送人玫瑰手有余香&#xff0c;小明希望自己能带给他人快乐&#xff0c;于是小明在每个好友生日的时候发去一份生日祝福。小明希望将自己的通讯录按好友的生日排序排序&#xff0c;这样就查看起来方便多了&#xff0c;也避免错过好友的生日。为了小明的美好愿望&#x…

嵌入式工程师面试笔试总结——day1

第一章、进程与线程 1、什么是进程、线程&#xff0c;有什么区别&#xff1f; 进程是资源&#xff08; CPU 、内存等&#xff09;分配的基本单位&#xff0c;线程是 CPU 调度和分配的基本单位&#xff08;程序执行的最小单 位&#xff09;。同一时间&#xff0c;如果CPU 是单…

数据库表设计范式

华子目录 MYSQL库表设计&#xff1a;范式第一范式&#xff08;1NF&#xff09;第二范式&#xff08;2NF&#xff09;第三范式&#xff08;3NF&#xff09;三范式小结巴斯-科德范式&#xff08;BCNF&#xff09;第四范式&#xff08;4NF&#xff09;第五范式&#xff08;5NF&…

提成制是什么?如何高效管理提成制?

提成工资制即将企业盈利按照一定的比例在企业和员工之间分成的方式&#xff0c;这种方式具有一定的激励性。实行提成制首先要确定合适的提成指标&#xff0c;一般是按照业务量或销售额提成&#xff0c;即多卖多得。 对于提成制来说&#xff0c;确定合适的提成方式和比例是非常重…

VPN技术-IPSec VPN概述学习笔记

企业对网络安全性的需求日益提升&#xff0c;而传统的TCPЛIP协议缺乏有效的安全认证和保密机制。IPSec(Internet Protocol Security)作为一种开放标准的安全框架结构&#xff0c;可以用来保证IP数据报文在网络上传输的机密性、完整性和防重放。 IPsec VPN&#xff08;Interne…

基于干扰观测器的 PD 控制

基于干扰观测器的 PD 控制 1. 基本概念 干扰观测器&#xff08;Disturbance Observer, DOB&#xff09; 是一种用于估计系统中未建模动态或外部干扰的工具&#xff0c;通过补偿干扰&#xff0c;提高系统控制性能。结合 PD 控制器&#xff0c;干扰观测器能够实时补偿外部扰动和…

缓存工具类编写

缓存工具类编写 一般操作 在外面日常开发中&#xff0c;经常会有为了减少数据库压力&#xff0c;而将数据保存到缓存中并设置一个过期时间的操作。日常代码如下&#xff1a; Autowired private RedisTemplate<String, String> redisTemplate;public Object queryDataW…

STM32hal库创建+LED控制演示+中断概念

1 如何使用STM32CubeMX创建ZET6项目 引言 大家好&#xff0c;今天我们将一起学习如何使用STM32CubeMX来创建一个基于ZET6的项目。如果你已经有一定的基础&#xff0c;那么这篇文章将帮助你快速回顾和深入理解创建项目的步骤。 准备工作 在开始之前&#xff0c;请确保你已经…

[371]基于springboot的高校实习管理系统

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校实习管理系统信息管理难度大&#xff0c;容错率低&am…