vue3如何使用VueQuill插入自定义按钮

 更新时间:2024年11月21日 09:38:31   作者:胡八一、  
在Vue3项目中使用VueQuill编辑器,通过自定义Blot元素,可以插入特定的标签或样式元素,满足项目需求

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>

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • elementUI中的$confirm调换两个按钮位置的实例代码

    elementUI中的$confirm调换两个按钮位置的实例代码

    这篇文章主要介绍了elementUI中的$confirm调换两个按钮位置的实例代码,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • Vue组件更新数据v-model不生效的解决

    Vue组件更新数据v-model不生效的解决

    这篇文章主要介绍了Vue组件更新数据v-model不生效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue如何实现动态改变地址栏的参数值

    vue如何实现动态改变地址栏的参数值

    这篇文章主要介绍了vue如何实现动态改变地址栏的参数值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Vue使用codemirror实现一个可插入自定义标签的textarea

    Vue使用codemirror实现一个可插入自定义标签的textarea

    这篇文章主要为大家详细介绍了Vue如何使用codemirror实现一个可插入自定义标签的textarea,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • vue ssr+koa2构建服务端渲染的示例代码

    vue ssr+koa2构建服务端渲染的示例代码

    这篇文章主要介绍了vue ssr+koa2构建服务端渲染的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • vue elementui简易侧拉栏的使用小结

    vue elementui简易侧拉栏的使用小结

    这篇文章主要介绍了vue elementui简易侧拉栏的使用,增加了侧拉栏,目的是可以选择多条数据展示数据,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Vue 删除和增加自定义组件实战教程

    Vue 删除和增加自定义组件实战教程

    Vue.js是一种流行的JavaScript框架,用于构建交互式的Web应用程序,在Vue.js中,我们可以通过动态地增加和删除组件来实现动态页面的构建和更新,本文介绍Vue 删除和增加自定义组件实战教程,感兴趣的朋友一起看看吧
    2024-08-08
  • 详解Vue中如何避免滥用watch

    详解Vue中如何避免滥用watch

    这篇文章主要为大家详细介绍了Vue中滥用watch带来的问题以及如何解决,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • element-plus el-form表单验证使用方法以及注意事项

    element-plus el-form表单验证使用方法以及注意事项

    这篇文章主要给大家介绍了关于element-plus el-form表单验证使用方法以及注意事项的相关资料,表单验证能通过设置验证规则验证用户的输入,并对不规范的输入做出对应提示,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Vue指令之 v-cloak、v-text、v-html实例详解

    Vue指令之 v-cloak、v-text、v-html实例详解

    当用户频繁刷新页面或网速慢时,页面未完成 Vue.js 的加载时,导致 Vue 来不及渲染,这就会导致在浏览器中直接暴露插值(表达式),这篇文章主要介绍了Vue指令 v-cloak、v-text、v-html,需要的朋友可以参考下
    2019-08-08

最新评论