npm install quill --save
在组件中引入Quill
editor.vuecss
<template> <div> <div class="editor"></div> </div> </template> <script> import Quill from 'quill' import 'quill/dist/quill.snow.css' export default { name: 'editor', props: { value: Object }, data() { return { quill:null, options: { theme: 'snow', modules: { toolbar: [ ['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'] ] }, placeholder: 'Insert text here ...' } } }, mounted() { let dom = this.$el.querySelector('.editor') this.quill = new Quill(dom, this.options); this.quill.setContents(this.value) this.quill.on('text-change', () => { this.$emit('input', this.quill.getContents()) }); } } </script>
App.vuevue
<template> <div> <div>背景</div> <editor v-model="bg"></editor> <div>计划</div> <editor v-model="plan"></editor> </div> </template> <script> import editor from '@/components/editor.vue'; export default { components: { editor }, data() { return { bg: {}, plan: {} } } } </script>
下面请原谅个人佛系翻译 :Pwebpack
用于获取编辑器里的内容,这些内容是带格式的,返回值是一个Delta对象。git
用法github
getContents(index: Number = 0, length: Number = remaining): Delta
例子web
var delta = this.quill.getContents();
用于设置编辑器里的内容(传入的delta参数常见使用 getContents 返回的值)。传入的内容应以新行结束。返回值是一个Delta对象。 source 参数能够传 "user" , "api" , "silent"。若是 source 是 "user",当编辑器处于 disabled时该方法会失效。vue-cli
用法npm
setContents(delta: Delta, source: String = 'api'): Delta
例子api
this.quill.setContents([ { insert: 'Hello ' }, { insert: 'World!', attributes: { bold: true } }, { insert: '\n' } ]);
设置用户可编辑能力。dom
用法
enable(enabled: boolean = true)
例子
this.quill.enable(); this.quill.enable(false); // Disables user input
同enable(false)。
为键盘按键和按键修饰符绑定监听函数。
其中,修改键包括: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 quill@2.0.0-dev.3 -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 = `-|`