vue3使用VueQuill插入自定义按钮

在 Vue 3 项目中使用 VueQuill 编辑器时,我们可以自定义内容来满足特定的需求。本文将介绍如何在 VueQuill 中插入自定义内容,比如插入特定的标签或样式元素。

Quill官方中文文档

1. 项目设置和依赖安装

如果你还没有创建 Vue 3 项目,可以使用以下命令来初始化项目:

npm init vue@latest

选择 Vue 3 的相关配置,然后进入项目目录并安装依赖项。

安装 VueQuill
npm install @vueup/vue-quill

此库是 Quill 编辑器的 Vue 3 兼容版本。


2. 基础配置 VueQuill

src/components 中创建一个 QuillEditor.vue 文件,并引入 vue3-quill,将 VueQuillEditor 作为编辑器组件使用。

template 内容
<template>
  <div class="editor">
    <quill-editor ref="quillEditorRef" v-model:content="content" content-type="html" :options="options" :style="styles" @text-change="textChangeFn" />
  </div>
</template>
options 内容:
import '@vueup/vue-quill/dist/vue-quill.snow.css';

import { Quill } from '@vueup/vue-quill';
const options = ref<any>({
  theme: 'snow',
  bounds: document.body,
  debug: 'warn',
  modules: {
    // 工具栏配置
    toolbar: {
      container: [
            ['bold', 'italic', 'underline', 'strike'], // 加粗 斜体 下划线 删除线
            ['blockquote', 'code-block'], // 引用  代码块
            [{ list: 'ordered' }, { list: 'bullet' }], // 有序、无序列表
            [{ indent: '-1' }, { indent: '+1' }], // 缩进
            [{ size: ['small', false, 'large', 'huge'] }], // 字体大小
            [{ header: [1, 2, 3, 4, 5, 6, false] }], // 标题
            [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
            [{ align: [] }], // 对齐方式
            ['clean'], // 清除文本格式
            ['link', 'image', 'video'], // 链接、图片、视频
            ['newFunction'] // 新添加的按钮
          ],
      handlers: {
        newFunction: (value: boolean) => {
          // 添加处理方法
          const quill = quillEditorRef.value.getQuill();
          // 插入自定义按钮
           quill.insertEmbed(0, 'customSpan', 'test');
        }
      }
    }
  },
  placeholder: props.readOnly ? '' : '请输入内容',
  readOnly:false
});

以上代码创建了一个基础的 VueQuillEditor 组件,我们可以在其中输入和编辑文本。


3. 自定义内容的插入

接下来,我们会在 Quill 编辑器中插入自定义内容,比如一个带特定样式的 span 标签。为此,我们需要创建一个 Quill 的自定义 Blot 元素。

新建 CustomSpanBlot.ts 文件

src/quill-blots 文件夹下新建 CustomSpanBlot.ts 文件,用于定义我们自定义的 span 标签格式:

import { Quill } from '@vueup/vue-quill';

const Inline = Quill.import("blots/inline");

class CustomSpanBlot extends Inline {
  static blotName = "customSpan";
  static tagName = "span";
  static className = "custom-span";

  static create(value: string) {
    const node = super.create();
    node.setAttribute("data-custom", value);
    node.innerHTML = value;
    return node;
  }

  static formats(node: HTMLElement) {
    return node.getAttribute("data-custom");
  }

  format(name: string, value: string) {
    if (name === CustomSpanBlot.blotName && value) {
      this.domNode.setAttribute("data-custom", value);
      this.domNode.innerHTML = value;
    } else {
      super.format(name, value);
    }
  }
}
export { CustomSpanBlot };

4. 插入内容到编辑器

QuillEditor.vue 中引入自定义的 CustomSpanBlot,并编写插入自定义内容的方法:

<script lang="ts">
import { CustomSpanBlot } from './CustomSpanBlot';
// 进行注册
Quill.register(CustomSpanBlot);
// 初始化
onMounted(() => {
  // 新增自定义功能
    const newFunctionButton = document.querySelector('.ql-newFunction');
    newFunctionButton.setAttribute('style', 'width:80px; border:1px solid #ccc; border-radius:5px');
    newFunctionButton.textContent = '新功能';
});
</script>

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【springboot使用sqlite数据库】Java后台同时使用mysql、sqlite

环境&#xff1a;根据业务的需要&#xff0c;老版程序使用的数据库是sqlite&#xff0c;版本升级成前后台分离模式&#xff0c;因此需要兼容mysql与sqlite数据库同时使用。 pom.xml设置&#xff1a; application.yml文件配置&#xff1a; mapper.java文件&#xff1a; service.…

多智能体深度确定性策略梯度(MADDPG)算法复现教程

复现软硬件: Ubunru20.04,Python 3.8.10, torch 2.4.1, gym 0.10.5,VScode 论文: http://arxiv.org/pdf/1706.02275 环境: GitHub - openai/multiagent-particle-envs: Code for a multi-agent particle environment used in the paper "Multi-Agent Actor-…

51c大模型~合集42

我自己的原文哦~ https://blog.51cto.com/whaosoft/11859244 #猎户座 「草莓」即将上线&#xff0c;OpenAI新旗舰大模型曝光&#xff0c;代号「猎户座」 ChatGPT 要进化了&#xff1f; 本月初&#xff0c;OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片&#xff0…

探索Copier:Python项目模板的革命者

文章目录 **探索Copier&#xff1a;Python项目模板的革命者**1. 背景介绍&#xff1a;为何Copier成为新宠&#xff1f;2. Copier是什么&#xff1f;3. 如何安装Copier&#xff1f;4. 简单库函数使用方法4.1 创建模板4.2 从Git URL创建项目4.3 使用快捷方式4.4 动态替换文本4.5 …

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…

前端学习资源合集,附链接

前言 本文是前端开发初学资源 初步 1. 三件套htmlcssjavascript 前端Web开发HTML5CSS3移动web视频教程&#xff0c;前端web入门首选黑马程序员_哔哩哔哩_bilibili 黑马程序员前端JavaScript入门到精通全套视频教程&#xff0c;javascript核心进阶ES6语法、API、js高级等基…

全同态加密基于多项式环计算的图解

全同态加密方案提供了一种惊人的能力 —— 能够在不知道数据具体内容的情况下对数据进行计算。这使得你可以在保持潜在敏感源数据私密的同时&#xff0c;得出问题的答案。 这篇文章的整体结构包括多项式环相关的数学介绍&#xff0c;基于多项式环的加密和解密是如何工作的&…

【Window主机访问Ubuntu从机——Xrdp配置与使用】

使用Xrdp在Window环境下远程桌面访问Ubuntu主机 文章目录 Ubuntu安装图形化界面Ubuntu安装Xrdp通过网线连接两台主机Window主机有线连接配置Ubuntu从机设置测试有线连接 Window主机打开远程桌面功能参考文章总结 Ubuntu安装图形化界面 sudo apt update sudo apt upgrade sudo …

stable-diffusion-3 ,每天免费试用

https://huggingface.co/spaces/stabilityai/stable-diffusion-3-mediumhttps://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium官方space&#xff0c;童叟无欺&#xff0c;科学试用。 an image of a girl with white hair, in the style of ross tran, light …

datastage在升级版本到11.7之后,部分在11.3上正常执行的SP报错SQLSTATE = 22007: 本机错误代码 = -180

在升级版本到11.7之后&#xff0c;部分在11.3上正常执行的SP开始报错&#xff0c;报的SQL错误是时间参数问题&#xff0c;但是一样的SP可以直接call sp执行&#xff0c;也可以手动调用作业执行&#xff0c;只有设置定时调度时作业会报错&#xff0c; CALLXXX.XXX(1,CURRENT TIM…

xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer

打开 .sh 文件所在的终端窗口&#xff0c;执行终端命令&#xff1a;sh 文件名.sh&#xff0c;出现如下错误&#xff1a; 解决办法&#xff1a;

如何修改npm包

前言 开发中遇到一个问题&#xff0c;配置 Element Plus 自定义主题时&#xff0c;添加了 ElementPlusResolver({ importStyle: "sass" }) 后&#xff0c;控制台出现报错&#xff0c;这是因为 Dart Sass 2.0 不再支持使用 !global 来声明新变量&#xff0c;虽然当前…

RabbitMQ队列详细属性(重要)

RabbitMQ队列详细属性 1、队列的属性介绍1.1、Type&#xff1a;队列类型1.2、Name&#xff1a;队列名称1.3、Durability&#xff1a;声明队列是否持久化1.4、Auto delete&#xff1a; 是否自动删除1.5、Exclusive&#xff1a;1.6、Arguments&#xff1a;队列的其他属性&#xf…

通过Python 调整Excel行高、列宽

在Excel中&#xff0c;默认的行高和列宽可能不足以完全显示某些单元格中的内容&#xff0c;特别是当内容较长时。通过调整行高和列宽&#xff0c;可以确保所有数据都能完整显示&#xff0c;避免内容被截断。合理的行高和列宽可以使表格看起来更加整洁和专业&#xff0c;尤其是在…

Qt学习笔记(四)多线程

系列文章目录 Qt开发笔记&#xff08;一&#xff09;Qt的基础知识及环境编译&#xff08;泰山派&#xff09; Qt学习笔记&#xff08;二&#xff09;Qt 信号与槽 Qt学习笔记&#xff08;三&#xff09;网络编程 Qt学习笔记&#xff08;四&#xff09;多线程 文章目录 系列文章…

用 Python 从零开始创建神经网络(三):添加层级(Adding Layers)

添加层级&#xff08;Adding Layers&#xff09; 引言1. Training Data2. Dense Layer Class 引言 我们构建的神经网络变得越来越受人尊敬&#xff0c;但目前我们只有一层。当神经网络具有两层或更多隐藏层时&#xff0c;它们变成了“深度”网络。目前我们只有一层&#xff0c…

如何在jupyter notebook切换python环境

目录 参考链接 首先确保conda已经正常安装 conda --version 或者conda -V 以下请将“myenv”替换成自己的命名&#xff01;&#xff01;&#xff01; 1-查看虚拟环境目录 conda env list 2-创建虚拟环境命令 conda create -n myenv 或者 conda create --name myenv 3-激活虚拟环…

C#从入门到放弃

C#和.NET的区别 C# C#是一个编程语言 .NET .NET是一个在window下创建程序的框架 .NET框架不仅局限于C#,它还可以支持很多语言 .NET包括了2个组件&#xff0c;一个叫CLR(通用语言运行时)&#xff0c;另一个是用来构建程序的类库 CLR 用C写一个程序&#xff0c;在一台8688的机器…

STM32 低功耗模式详解

目录 一、什么是低功耗 二、低功耗的核心思想 三、STM32的3种低功耗模式 1、睡眠模式 (Sleep Mode) 2、停止模式 (Stop Mode) 3、 待机模式 (Standby Mode) 四、相关电源管理寄存器 1、PWR_CR (Power Control Register, 电源控制寄存器) 2、PWR_CSR (Power Control/St…

数位DP学习

数位 DP - OI Wiki 引入 主要变量及函数 变量&#xff1a; L, R: 所求区间边界 limit&#xff1a;边界限制&#xff0c;主要在记忆化搜索里用 len&#xff1a;所求数的位数 pos&#xff1a;当前所求位置 lead&#xff1a; 前导零 DP[N][M] &#xff1a;第一维是当前的pos&…