vue-quill-editor(富文本) 在 vue 中如何使用

2024-01-29 18:38

本文主要是介绍vue-quill-editor(富文本) 在 vue 中如何使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  1. 安装 vue-quill-editor
    npm install vue-quill-editor -S
  2. 安装quill
    npm install quill -S
  3. 引入
    import { quillEditor } from 'vue-quill-editor' // 调用富文本编辑器
    import 'quill/dist/quill.snow.css' // 富文本编辑器外部引用样式 三种样式三选一引入即可
    //import 'quill/dist/quill.core.css'
    //import 'quill/dist/quill.bubble.css'
    import * as Quill from 'quill'; // 富文本基于quill
  4. 使用

<!-- template部分 -->

<quill-editorv-model="content"ref="myQuillEditor":options="editorOption"@focus="onEditorFocus($event)"@blur="onEditorBlur($event)"@change="onEditorChange($event)">
</quill-editor>

<!-- js data部分 -->

``

editor: null,   // 富文本编辑器对象
content: `<p></p><p><br></p><ol></ol>`, // 富文本编辑器默认内容
editorOption: { //  富文本编辑器配置modules: {toolbar: '#toolbar'},theme: 'snow',placeholder: '请输入正文'
},

<!-- js mounted部分 -->

this.editor = this.$refs.myQuillEditor.quill;

<!-- js beforeDestroy部分 -->

this.editor = null;
delete this.editor;

<!-- js methods部分 -->

// 准备富文本编辑器
onEditorReady (editor) {},
// 富文本编辑器 失去焦点事件
onEditorBlur (editor) {},
// 富文本编辑器 获得焦点事件
onEditorFocus (editor) {},
// 富文本编辑器 内容改变事件
onEditorChange (editor) {},

<!-- js components部分 -->

components: {quillEditor
}
  1. 如果想自定义工具栏:
<!-- template部分 -->
<div id="toolbar" slot="toolbar"><button class="ql-bold" title="加粗">Bold</button><select class="ql-header" title="段落格式"><option selected>正文</option><option value="2">标题1</option><option value="3">标题2</option><option value="4">标题3</option></select><button class="ql-list" value="ordered" title="有序列表"></button><button class="ql-list" value="bullet" title="无序列表"></button><select class="ql-color" value="color" title="字体颜色"></select><span class="icon-pic custom-icon" title="图片" @click="insertImgClick($event)"></span>  <!-- 插入图片 --><span class="icon-video custom-icon" title="视频" @click="insertImgClick($event)"></span>  <!-- 插入视频 -->
</div>
<input style="display: none;" type="file" id="insert_image" @change="fileInsert($event)">  <!-- 选择图片input -->
<input style="display: none;" type="file" id="insert_video" @change="fileInsert($event)">  <!-- 选择视频input --><!-- js methods部分 -->
// 富文本编辑器 点击插入图片或者视频
insertImgClick (e) {if (e.target.className.indexOf('icon-pic') != -1) {document.getElementById('insert_image').click();} else if (e.target.className.indexOf('icon-video') != -1) {document.getElementById('insert_video').click();}
},
// 富文本编辑器 点击插入图片或者视频上传并预览
fileInsert (e) {var oFile = e.target.files[0];if (typeof (oFile) === 'undefined') {return;}let sExtensionName = oFile.name.substring(oFile.name.lastIndexOf('.') + 1).toLowerCase();   // 文件扩展名let sfileType = ''; // 上传文件类型if (e.target.id == 'insert_image') {sfileType = 'image'if (sExtensionName !== 'png' && sExtensionName !== 'jpg' && sExtensionName !== 'jpeg') {alert('不支持该类型图片');return;}}if (e.target.id == 'insert_video') {sfileType = 'video';if (sExtensionName !== 'mp4' && sExtensionName !== 'avi' && sExtensionName !== 'mov') {alert('不支持该类型视频');return;}let maxSize = 100*1024*1024;    // 100MBif (oFile.size > maxSize) {alert('上传视频大小不能超过100MB');return;}}var reader = new FileReader();reader.readAsDataURL(oFile);reader.onloadend = () => {let formData = new FormData(); // 通过formdata上传formData.append('file', oFile);let sUrl = '';if (sfileType == 'image') {sUrl = 'Pic';}if (sfileType == 'video') {sUrl = 'Vie';}var url = this.api_config + '/dealerIndex/upload' + sUrl + '.htm';this.axios.post(url, formData, {headers: { 'Content-Type': 'multipart/form-data' }}).then((res) => {this.editor.insertEmbed(this.editor.selection.savedRange.index, sfileType, res.data.data);  // 这个方法用来手动插入dom到编辑器里let isAndroid = this.$is_android(); // 判断是ios还是androidif (isAndroid) {$('video').removeAttr('controls');$('video').attr('x5-video-player-type', 'h5');}this.editor.setSelection(this.editor.selection.savedRange.index + 1);  // 这个方法可以获取光标位置}).catch((response) => {console.log('失败', response);})}
},
关于编辑器里面的一些操作可以到quill官方查看,用法和配置项的的介绍很详细,很好用
  1. 如果想更好地操作插入的video,可以把iframe改成h5的video,通过下面这段代码:
import { Quill } from 'vue-quill-editor'// 源码中是import直接倒入,这里要用Quill.import引入
const BlockEmbed = Quill.import('blots/block/embed')
const Link = Quill.import('formats/link')const ATTRIBUTES = ['height', 'width']class Video extends BlockEmbed {static create (value) {const node = super.create(value)// 添加video标签所需的属性node.setAttribute('controls', 'controls')   // 控制播放器node.setAttribute('type', 'video/mp4')node.setAttribute('style', 'object-fit:fill;width: 100%;')node.setAttribute('preload', 'auto')    // auto - 当页面加载后载入整个视频  meta - 当页面加载后只载入元数据  none - 当页面加载后不载入视频node.setAttribute('webkit-playsinline', 'true') // 兼容ios 不全屏播放node.setAttribute('playsinline', 'true')node.setAttribute('x-webkit-airplay', 'allow')// node.setAttribute('x5-video-player-type', 'h5') // 启用H5播放器,是wechat安卓版特性node.setAttribute('x5-video-orientation', 'portraint') // 竖屏播放 声明了h5才能使用  播放器支付的方向,landscape横屏,portraint竖屏,默认值为竖屏node.setAttribute('x5-playsinline', 'true') // 兼容安卓 不全屏播放node.setAttribute('x5-video-player-fullscreen', 'true')    // 全屏设置,设置为 true 是防止横屏node.setAttribute('src', this.sanitize(value))return node}static formats (domNode) {return ATTRIBUTES.reduce((formats, attribute) => {if (domNode.hasAttribute(attribute)) {formats[attribute] = domNode.getAttribute(attribute)}return formats}, {})}static sanitize (url) {return Link.sanitize(url) // eslint-disable-line import/no-named-as-default-member}static value (domNode) {return domNode.getAttribute('src')}format (name, value) {if (ATTRIBUTES.indexOf(name) > -1) {if (value) {this.domNode.setAttribute(name, value)} else {this.domNode.removeAttribute(name)}} else {super.format(name, value)}}html () {const { video } = this.value()return `<a href="${video}">${video}</a>`}
}
Video.blotName = 'video' // 这里不用改,楼主不用iframe,直接替换掉原来,如果需要也可以保留原来的,这里用个新的blot
Video.className = 'ql-video'
Video.tagName = 'video' // 用video标签替换iframeexport default Video
然后再把它引入到有编辑器的那个文件里:import Video from '../../plugins/video.js'; // 插入h5 video视频
Quill.register(Video, true);  // 注册video

就是这么多了~~~

这篇关于vue-quill-editor(富文本) 在 vue 中如何使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/657828

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min