富文本编辑器:vue-quill-editor
vue-quill-editor是一款可适配PC端和移动端富文本编辑器,具有可设置自定义配置项、外观简洁且轻量的优点。
PC端效果图如下:
移动端的效果图如下:
vue-quill-editor配置
在项目目录下载vue-quill-editor:
1
npm i vue-quill-editor -S
在Vue页面的script模块中引入vue-quill-editor:
1
2
3
4
5
6
7
8
9import Vue from 'vue'
import Quill from "quill";
import { quillEditor } from "vue-quill-editor";
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
Vue.use(quillEditor)//注册组件的方式之一在Vue页面的template模块中引入组件:
1
2
3
4
5
6
7
8<quill-editor
v-model="content"
ref="myQuillEditor"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@change="onEditorChange($event)">
</quill-editor>在Vue页面的scripts模块中完善组件的设置,完整的scripts模块代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61import Quill from "quill";
import { quillEditor } from "vue-quill-editor";
import 'quill/dist/quill.core.css';
import 'quill/dist/quill.snow.css';
import 'quill/dist/quill.bubble.css';
export default {
components: {
quillEditor,//另一种组件注册方式
},
data() {
return {
content:'',
str:'',
editorOption: {
placeholder: "请在这里输入",
modules:{
toolbar:[
['bold', 'italic', 'underline', 'strike'], //加粗,斜体,下划线,删除线
['blockquote', 'code-block'], //引用,代码块
[{ 'header': 1 }, { 'header': 2 }], // 标题,键值对的形式;1、2表示字体大小
[{ 'list': 'ordered'}, { 'list': 'bullet' }], //列表
[{ 'script': 'sub'}, { 'script': 'super' }], // 上下标
[{ 'indent': '-1'}, { 'indent': '+1' }], // 缩进
[{ 'direction': 'rtl' }], // 文本方向
[{ 'header': [1, 2, 3, 4, 5, 6, false] }], //几级标题
[{ 'color': [] }, { 'background': [] }], // 字体颜色,字体背景颜色
[{ 'font': []}],
[{'align': []}], //对齐方式
['clean'], //清除字体样式
['image','video'] //上传图片、上传视频
],
},
},
}
},
methods: {
onEditorReady(editor) {},// 准备编辑器
onEditorBlur(){}, // 失去焦点事件
onEditorFocus(){}, // 获得焦点事件
// 内容改变事件--给父组件传值
onEditorChange(){
this.$emit("input", this.content);
},
// 转码
escapeStringHTML(str) {
str = str.replace(/</g,'<');
str = str.replace(/>/g,'>');
return str;
}
},
computed: {
editor() {
return this.$refs.myQuillEditor.quill;
},
},
mounted() {
let content = ''; // 请求后台返回的内容字符串
this.str = this.escapeStringHTML(content);
}
}至此便可以使用富文本了。需要注意的是,该富文本编辑器的所编辑的内容,在存储数据时会按照html的格式存储,例如:
1
2输入内容为123时,
存储到后台的实际文本为<p>123</p>因此要从后台读取数据时,需要使用
v-html
的方式来解析数据,在需要让存储数据显示的Vue页面里,添加如下代码即可:1
2
3
4<div v-html="item.answer" class="ql-editor" >
{{content}}
</div>
<--其中content为存储vue-quill-editor内容的参数-->
使用v-html
解析数据时,会出现所展示的图片尺寸异常的情况,若想让图片显示出正常的大小,只需在样式style中添加以下CSS代码即可:
1 | .ql-editor img{ |
调整图片尺寸&图片拖拽上传(PC端)
直接使用vue-quill-editor上传图片时,图片是不能实现调整图片尺寸和图片拖拽上传的,若想要实现这些功能,则需要下载插件quill-image-resize-module
和quill-image-drop-module
。
插件配置
首先需要下载插件:
1
2npm i quill-image-drop-module -S
npm i quill-image-resize-module -S然后在Vue页面的script模块中引入这两个插件:
1
2
3
4
5import { ImageDrop } from 'quill-image-drop-module';
import ImageResize from 'quill-image-resize-module';
Quill.register('modules/imageDrop',ImageDrop);
Quill.register('modules/imageResize', ImageResize);然后在
data return
中引入插件的配置如下:1
2
3
4
5
6
7
8
9
10
11
12
13editorOption: {
modules:{
imageDrop:true,
imageResize:{
displaySize:{
backgroundColor: "black",
border: "none",
color: "white",
},
modules:['Resize','DisplaySize','Toolbar']
}
}
}配置引入后,在
vue.config.js
文件中引入一下配置:1
2
3
4
5
6
7
8
9
10
11var webpack = require('webpack');
module.exports = defineConfig({
configureWebpack: {
plugins:[
new webpack.ProvidePlugin({
'window.Quill':'quill/dist/quill.js',
'Quill':'quill/dist/quill.js'
})
]
}
})重启vue-cli后,便可在PC端实现调整图片尺寸和图片拖拽上传的功能