【华为云技术分享】现代富文本编辑器Quill的模块化机制

DevUI是一支兼具设计视角和工程视角的团队,服务于华为云DevCloud平台和华为内部数个中后台系统,服务于设计师和前端工程师。

官方网站:devui.design

Ng组件库:ng-devui(欢迎Star)

引言

本文基于DevUI的富文本编辑器开发实践和Quill源码写成。

EditorX是DevUI开发的一款好用、易用、功能强大的富文本编辑器,它的底层基于Quill,并对其做了大量扩展,以增强编辑器的能力。

Quill是一款API驱动、支持格式和模块定制的开源Web富文本编辑器,目前在Github的Star数超过25k。

如果还没有接触过Quill,建议先去Quill官网了解下它的基本概念。

通过阅读本文,你将收获:

  1. 了解Quill模块是什么,怎么配置Quill模块
  2. 为什么要创建Quill模块,怎么创建自定义Quill模块
  3. Quill模块如何与Quill进行通信
  4. 深入了解Quill的模块化机制

Quill模块初探

使用Quill开发过富文本应用的人,应该都对Quill的模块有所了解。

比如,当我们需要定制自己的工具栏按钮时,会配置工具栏模块:

var quill = new Quill('#editor', {

  theme: 'snow',

  modules: {

    toolbar: [['bold', 'italic'], ['link', 'image']]

  }

});

其中的modules参数就是用来配置模块的。

toolbar参数用来配置工具栏模块,这里传入一个二维数组,表示分组后的工具栏按钮。

渲染出来的编辑器将包含4个工具栏按钮:

要看以上Demo,请怒戳配置工具栏模块

Quill模块是一个普通的JS类

那么Quill模块是什么呢?我们为什么要了解和使用Quill模块呢?

Quill模块其实就是一个普通的JavaScript类,有构造函数,有成员变量,有方法。

以下是工具栏模块的大致源码结构:

class Toolbar {

  constructor(quill, options) {

    // 解析传入模块的工具栏配置(就是前面介绍的二维数组),并渲染工具栏

  }





  addHandler(format, handler) {

    this.handlers[format] = handler;

  }

  ...

}

可以看到工具栏模块就是一个普通的JS类。在构造函数中传入了quill的实例和options配置,模块类拿到quill实例就可以对编辑器进行控制和操作。

比如:工具栏模块会根据options配置构造工具栏容器,将按钮/下拉框等元素填充到该容器中,并绑定按钮/下拉框的处理事件。最终的结果就是在编辑器主体上方渲染了一个工具栏,可以通过工具栏按钮/下拉框给编辑器内的元素设置格式,或者在编辑器中插入新元素。

Quill模块的功能很强大,我们可以利用它来扩展编辑器的能力,实现我们想要的功能。

除了工具栏模块之外,Quill还内置了一些很实用的模块,我们一起来看看吧。

Quill内置模块

Quill一共内置6个模块:

  1. Clipboard 粘贴版
  2. History 操作历史
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值