【版本】
- vue-cli3
- [email protected]
- [email protected]
【步骤】
下载Quill
npm install quill --save
封装一个富文本编辑器组件
在组件中引入Quill
editor.vue
在有需要的页面使用该组件
App.vue
背景
计划
【常用API】
下面请原谅我的佛系翻译 :P
quill.getContents
用于获取编辑器里的内容,这些内容是带格式的,返回值是一个Delta对象。
用法
getContents(index: Number = 0, length: Number = remaining): Delta
例子
var delta = this.quill.getContents();
quill.setContents
用于设置编辑器里的内容(传入的delta参数常见使用 getContents 返回的值)。传入的内容应以新行结束。返回值是一个Delta对象。 source 参数可以传 "user" , "api" , "silent"。如果 source 是 "user",当编辑器处于 disabled时该方法会失效。
用法
setContents(delta: Delta, source: String = 'api'): Delta
例子
this.quill.setContents([
{ insert: 'Hello ' },
{ insert: 'World!', attributes: { bold: true } },
{ insert: '\n' }
]);
quill.enable
设置用户可编辑能力。
用法
enable(enabled: boolean = true)
例子
this.quill.enable();
this.quill.enable(false); // Disables user input
quill.disable
同enable(false)。
quill.keyboard.addBinding
为键盘按键和按键修饰符绑定监听函数。
其中,修改键包括:metaKey, ctrlKey, shiftKey, altKey。另外,shortKey 是平台特定的修改键,在Mac系统下等同于metaKey,在Linux 和 Windows系统下等同于ctrlKey。
例子
// 在Windows下Ctrl+Shift+S 完成编辑
var that = this
this.quill.keyboard.addBinding({
key: 'S',
shortKey: true,
shiftKey: true,
handler: function (range, context) {
that.finish()
}
})
【常用功能】
在工具栏增加表格插入、删除功能
quill v1 版本不支持插入表格,v2的dev版本支持表格编辑。于是我从原来的v1.3.6升级成了v2.0.0-dev.3。
npm install [email protected] -dev--save
然后,改变options
options: {
theme: 'snow',
modules: {
toolbar: {
container: [
['bold', 'italic', 'underline', 'strike'],
['blockquote', 'code-block'],
[{ 'header': 1 }, { 'header': 2 }],
[{ 'list': 'ordered' }, { 'list': 'bullet' }],
[{ 'script': 'sub' }, { 'script': 'super' }],
[{ 'indent': '-1' }, { 'indent': '+1' }],
[{ 'direction': 'rtl' }],
[{ 'size': ['small', false, 'large', 'huge'] }],
[{ 'header': [1, 2, 3, 4, 5, 6, false] }],
[{ 'color': [] }, { 'background': [] }],
[{ 'font': [] }],
[{ 'align': [] }],
['clean'],
['link', 'image', 'video'],
[
{ 'table': 'TD' },
{ 'table-insert-row': 'TIR' },
{ 'table-insert-column': 'TIC' },
{ 'table-delete-row': 'TDR' },
{ 'table-delete-column': 'TDC' }
]
],
handlers: {
'table': function (val) {
this.quill.getModule('table').insertTable(2, 3)
},
'table-insert-row': function () {
this.quill.getModule('table').insertRowBelow()
},
'table-insert-column': function () {
this.quill.getModule('table').insertColumnRight()
},
'table-delete-row': function () {
this.quill.getModule('table').deleteRow()
},
'table-delete-column': function () {
this.quill.getModule('table').deleteColumn()
}
},
},
table: true,
},
placeholder: '点击输入 ...'
},
这样功能就完成了,但是此时看下工具栏,表格相关的图标还是空白的。由于我还没有设计图标,先这么凑活着写了:
this.$el.querySelector('.ql-table-insert-row').innerHTML = `—`
this.$el.querySelector('.ql-table-insert-column').innerHTML = `|`
this.$el.querySelector('.ql-table-delete-row').innerHTML = `-—`
this.$el.querySelector('.ql-table-delete-column').innerHTML = `-|`