Angular17版本集成Quill富文本编辑器

Angular17版本集成Quill富文本编辑器

前言:网上找了好多富文本资源,对应Angular17版本的且兼容的太少了,且找到不到对应的版本
自己就去网上找个兼容的免费的富文本组件

1.兼容Angular17版本的quill包

    "@types/quill": "^1.3.10","ngx-quill": "^24.0.0","quill": "^1.3.7","quill-delta": "^5.1.0","quill-image-resize-module": "^3.0.0","rxjs": "^7.5.7",

其中 “rxjs”:需要和 “ngx-quill”: “^24.0.0”,兼容 所以是 ^7.5.7版本

quill-image-resize-module": “^3.0.0”,是图片操作 对图片放大放小

2.引入配置文件

angular.json中需要引入css/js   不在这里引入的话组件会报错
            "scripts": ["node_modules/quill/dist/quill.min.js","node_modules/quill-image-resize-module/image-resize.min.js"]
            "styles": ["node_modules/driver.js/dist/driver.css","node_modules/quill/dist/quill.snow.css"]

要找到位置添加

封装组件

我是在原有的组件上封装的组件,因为涉及到图片上传,和绑定表单数据所以自己就封装个独立组件方便使用

在这里插入图片描述

其中html

<div id="editor"></div>

样式:less

#editor {min-height: 400px;max-height: 800px;overflow: auto;
}

ts

import { Component, forwardRef, Input, OnInit } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
import Quill from 'quill';
import ImageResize from 'quill-image-resize-module';
// 注册ImageResize模块
Quill.register('modules/imageResize', ImageResize);
@Component({selector: 'app-qu-editor',standalone: true,templateUrl: './qu-editor.component.html',styleUrls: ['./qu-editor.component.less'],providers: [{provide: NG_VALUE_ACCESSOR,useExisting: forwardRef(() => QuEditorComponent),multi: true}]
})
export class QuEditorComponent implements OnInit, ControlValueAccessor{@Input() uploadDir: string = "pmc/image/project"; // 默认的上传目录quillEditor: any;editorContent: string = '';constructor(private http: HttpClient) {}ngOnInit() {this.initEditor();}initEditor() {this.quillEditor = new Quill('#editor', {theme: 'snow',modules: {toolbar: [[{ 'header': [1, 2, 3, 4, 5, 6, false] }],['bold', 'italic', 'underline', 'strike'],[{ 'list': 'ordered'}, { 'list': 'bullet' }],[{ 'indent': '-1'}, { 'indent': '+1' }],[{ 'size': ['small', false, 'large', 'huge'] }],[{ 'color': [] }, { 'background': [] }],[{ 'align': [] }],['link', 'image', 'video', 'code-block'],['clean']],imageResize: {} // 添加imageResize模块},});this.quillEditor.on('text-change', () => {this.onChange(this.quillEditor.root.innerHTML);});this.quillEditor.getModule('toolbar').addHandler('image', this.imageHandler.bind(this));}imageHandler() {const input = document.createElement('input');input.setAttribute('type', 'file');input.setAttribute('accept', 'image/*');input.click();input.onchange = () => {const file = input.files[0];if (file) {const formData = new FormData();formData.append('file', file);formData.append('dir', this.uploadDir);this.http.post<any>('/pmc/upload', formData).subscribe(res => {if (res.success) {const range = this.quillEditor.getSelection();this.quillEditor.insertEmbed(range.index, 'image', res.data);} else {console.error('Image upload failed: ' + res.msg);}},err => {console.error('Image upload failed: ' + err.message);});}};}writeValue(value: any): void {this.editorContent = value;if (this.quillEditor) {this.quillEditor.root.innerHTML = this.editorContent;}}onChange = (value: any) => {};onTouched = () => {};registerOnChange(fn: any): void {this.onChange = fn;}registerOnTouched(fn: any): void {this.onTouched = fn;}
}

使用:

在表单里面使用:

      <nz-form-item><nz-form-label [nzSpan]="4" nzFor="description">产品描述</nz-form-label><nz-form-control [nzSpan]="16" nzHasFeedback nzErrorTip="产品描述"><app-qu-editor formControlName="description"></app-qu-editor></nz-form-control></nz-form-item>

可以通过传值修改图片上传路径

也可以通过[ngModel]绑定值

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

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

相关文章

备战618!各广告平台SDK版本更新;最新支持eCPR指标;新增自动创建广告源平台 | TopOn产品更新

「TopPro 每月产品速递」是由TopOn最新推出的产品专栏&#xff0c;将会以月为周期梳理TopOn最新产品动态&#xff0c;致力于为互联网从业者提供优质服务&#xff0c;引领行业产品发展。 TopPro | 3~5月产品速递 2024.03.01-05.30 01 eCPR指标支持 // 功能描述 TopOn后台支…

C语言字符、数组指针变量

目录 一、字符指针变量 二、数组指针变量 a.数组指针变量是什么 b.数组指针变量的书写格式 c.数组指针变量如何初始化 d.二维数组传参的本质 一、字符指针变量 在指针的类型中我们知道有一种指针类型为字符指针 char* 。 其一般使用&#xff1a; int main() {char ch w…

ES 8的向量检索性能调优实践

前言 ES的官方实验室曾发布过一篇博客,介绍了使ES向量检索性能获得显著提升的技术要点与展望: 多线程搜索能力的利用:Lucene 的分段架构允许实现多线程搜索能力。Elasticsearch 通过同时搜索多个段来提高性能,使用所有可用的 CPU 核心的计算能力显著减少了单个搜索的延迟。…

关闭windows11磁盘地址栏上的历史记录

关闭windows11的磁盘地址栏上的历史记录 windows11打开磁盘后访问某一个磁盘路径后会记录这个磁盘路径&#xff0c;而且有时候会卡住这个地址栏&#xff08;关都关不掉&#xff09;&#xff0c;非常麻烦。 如下图所示&#xff1a; 关闭地址栏历史记录 按下windows键打开开…

Python 机器学习 基础 之 【常用机器学习库】 Matplotlib 数据可视化库

Python 机器学习 基础 之 【常用机器学习库】 Matplotlib 数据可视化库 目录 Python 机器学习 基础 之 【常用机器学习库】 Matplotlib 数据可视化库 一、简单介绍 二、Matplotlib 基础 1、安装 Matplotlib 2、导入 Matplotlib 3、基本绘图 3.1 绘制简单折线图 3.2、绘…

Framework | Android Rescue Party: 提升设备恢复力的机制

Framework | Android Rescue Party: 提升设备恢复力的机制 什么是 Rescue Party? Rescue Party 是 Android 操作系统中的一种机制,旨在当设备遇到系统崩溃或启动失败时提供自动恢复的方案。这一机制特别针对系统关键组件的反复崩溃,防止设备陷入无法使用的状态。 主要功能…

学习笔记——网络参考模型——TCP/IP模型(网络层)

三、TCP/IP模型-网络层 1、IPV4报头 (1)IPV4报文格式 IP Packet(IP数据包)&#xff0c;其包头主要内容如下∶ Version版本∶4 bit&#xff0c;4∶表示为IPv4; 6∶表示为IPv6。 Header Length首部长度∶4 bit&#xff0c;代表IP报头的长度(首部长度)&#xff0c;如果不带Opt…

Java 还能不能继续搞了?

金三银四招聘季已落幕&#xff0c;虽说行情不是很乐观&#xff0c;但真正的强者从不抱怨。 在此期间&#xff0c;我收到众多小伙伴的宝贵反馈&#xff0c;整理出132道面试题&#xff0c;从基础到高级&#xff0c;有八股文&#xff0c;也有对某个知识点的深度解析。包括以下几部…

HackTheBox-Machines--Aragog

Aragog 测试过程 1 信息收集 NMAP 服务器开启了 21、22、80端口 21 端口测试 首先测试 21 端口&#xff0c;21端口开启了匿名登录 ftp服务器上存在 test.txt 文件&#xff0c;test.txt 文件是 xml 格式。 80 端口测试 echo "10.129.97.250 aragog.htb" | sudo tee…

鸿蒙全栈开发-基于ARKTS开发之初识框架-app.json5

前言 随着鸿蒙的不断发展,华为自行研制的“鸿蒙系统”横空出世&#xff0c;华为用实力为自己开辟了一个全新的时代&#xff0c;让中国品牌走向世界,并为程序员们带来了新的职业机遇。 这里来跟大家简单的聊一下鸿蒙基于ARKTS开发之初识框架-app.json5 当我们新建一个工程或者…

沃可趣产品增PC版,员工社区登上大屏幕

作为企业内部沟通与协作的枢纽&#xff0c;员工互动社区在促进信息流通、增强团队凝聚力方面扮演着关键角色。 沃可趣&#xff0c;这一匠心打造的员工互动社区&#xff0c;融汇了工作、学习与社交的精髓&#xff0c;为职场人构筑了一站式互动天地。 为了满足更广泛的工作场景…

交流回馈老化测试负载:行业竞争态势

在当今的科技行业中&#xff0c;交流回馈老化测试负载设备已经成为了一个重要的组成部分。这种设备主要用于模拟电力系统中的各种负载情况&#xff0c;以便对电力系统进行全面的测试和评估。随着科技的不断发展&#xff0c;这个行业的竞争态势也在不断变化。 从市场竞争的角度来…

Foxmail邮箱的简单实用

Foxmail邮箱是我们办公邮箱中比较有代表性和使用性的一款邮箱软件&#xff0c;今天笔者为大家介绍一下Foxmail邮箱的功能和使用方法。 1、首先我们从安装Foxmail邮箱开始 2、点击安装等待安装成功 3、双击打开 &#xff0c;出现邮箱设置界面输入我们的账号密码&#xff0c;点击…

电商数据采集决策智慧:深度解析数据采集与应用||电商API数据采集接口的接入与应用

引言 在数字化时代&#xff0c;数据已成为电商企业最宝贵的资产之一。通过有效的数据采集&#xff0c;企业能够洞察市场动态、理解消费者需求、优化运营策略&#xff0c;从而在激烈的市场竞争中脱颖而出。本文将深入探讨电商数据采集的重要性、常用方法以及应用实践。 一、电…

Python接口自动化测试:Json 数据处理实战

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 上一篇说了关于json数据处理&#xff0c;是为了断言方便&#xff0c;这篇就带各位小伙伴实战一下…

【工作流】 工作流相关概念及Activiti基本介绍

目录 工作流作用工作流的几个要素应用具体应用场景 工作流系统工作流系统的组成部分&#xff1a;都有哪些工作流系统 工作流引擎工作流引擎的特点&#xff1a;都有哪些工作流引擎 工作流、工作流引擎、工作流系统三者区别ActivitiActiviti的主要特点发展历史优缺点优点&#xf…

医疗保健的未来——Kompas.ai如何助力精准医疗

引言 在现代医学中&#xff0c;精准医疗逐渐成为提高诊疗效果的重要手段。随着科技的进步&#xff0c;人工智能&#xff08;AI&#xff09;在医疗领域的应用越来越广泛。本文将探讨精准医疗的发展趋势&#xff0c;并介绍Kompas.ai如何通过AI技术助力精准医疗的发展。 精准医疗…

哈尔滨三级等保测评需要测哪些设备?

哈尔滨三级等保测评需要测的设备&#xff0c;主要包括物理安全设备、网络安全设备和应用安全设备三大类别。这些设备在保障哈尔滨地区信息系统安全方面发挥着至关重要的作用。 首先&#xff0c;物理安全设备是确保信息系统实体安全的基础。在哈尔滨三级等保测评中&#xff0c;物…

纷享销客安全体系:安全合规认证

安全合规认证是指组织通过独立的第三方机构对其信息系统和数据进行评估和审查&#xff0c;以确认其符合相关的安全标准、法律法规和行业要求的过程。 安全合规认证可以帮助组织提高信息系统和数据的安全性&#xff0c;并向客户、合作伙伴和监管机构证明其符合相关的安全标准和…

Parallels Desktop for Mac 19.4.0更新了哪些内容?有什么改进?

带来了重新设计的共享 Mac 文件夹版本&#xff0c;这些文件夹现在是符号链接&#xff0c;像指针一样指向您的 Mac 文件夹中的文件&#xff0c;同时仍然显示在 Windows 的本地磁盘上。 修复了由于共享文件夹问题导致 NinjaTrader 无法正常启动的问题。 修复了由于共享文件夹问…