富文本
第一步下载 vue-quill-editor:
npm i vue-quill-editor -S
第二步,将vue-quill-editor引入到main.js:
import VueQuillEditor from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
Vue.use(VueQuillEditor);
第三步,就可以在组件里面使用了。
<div>
<quill-editor v-model="ruleForm.content"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@change="onEditorChange($event)">
</quill-editor>
</div>
import { quillEditor } from 'vue-quill-editor'
import Quill from 'quill'
export default {
components: {quillEditor},
data () {
return {
content: null,
editorOption: {
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" }],
[{ size: ["small", false, "large", "huge"] }],
[{ header: [1, 2, 3, 4, 5, 6, false] }],
[{ color: [] }, { background: [] }],
[{ font: [] }],
[{ align: [] }],
["clean"],
["link", "image", "video"]
],
},
placeholder: '请在这里添加产品描述',
readyOnly: false,
theme: 'snow',
syntax: true,
}
}
},
methods: {
onEditorBlur(editor) {},
onEditorFocus(editor) {},
onEditorReady(editor) {},
onEditorChange(editor) {
this.content = editor.html;
console.log(editor);
},
},
computed: {
editor() {
return this.$refs.myQuillEditor.quill;
}
},
简单的完成了-------------------------------------------------------------------------------------
实现图片拖拽,放大和缩小,需要下载 vue-quill-editor image依赖的功能插件。
下载依赖
npm i quill-image-drop-module -S
npm i quill-image-resize-module -S
在.vue中引入
import { ImageDrop } from 'quill-image-drop-module'
import ImageResize from 'quill-image-resize-module'
Quill.register('modules/imageDrop', ImageDrop);
Quill.register('modules/imageResize', ImageResize);
editorOption: {
modules: {
imageDrop: true, //图片拖拽
imageResize: {
//放大缩小
displaySize: true,
},
toolbar: {
container: toolbarOptions, // 工具栏
},
},
theme: "snow",
},
这样图片就可以放大缩小,和拖拽了。----------------------------------------------
缺点
富文本编辑器的图片上传,显示的地址是base64格式,如何图片上传过多的话就会特别减缓富文本的提交速度,特别慢而且会报错。
所以会选择将图片上传到服务器上,然后返回后台给的img链接,最后显示在富文本对应的位置。
解决方法一:给后台传的图片格式是formData格式,就是文件格式,
将图片上传到服务器需要vue-quill-editor 的 image扩展插件,首先下载这个插件:
npm i quill-image-extend-module -S
然后将插件引入富文本组件中使用。
import {container, ImageExtend, QuillWatch} from 'quill-image-extend-module'
Quill.register('modules/ImageExtend', ImageExtend);
editorOption: {
modules: {
toolbar: {
container: toolbarOptions, // 工具栏
handlers: {
image: function () {
//触发图片上传的时候返回的信息
QuillWatch.emit(this.quill.id); //使用图片上传插件的统一写法
},
},
},
imageResize: {
//图片放大缩小
displaySize: true,
},
ImageExtend: {
//使用的图片上传扩展插件
name: "img", //传的参数名
size: 2, // 单位为M, 1M = 1024KB
action: url, //后台上传图片的接口地址
headers: (xhr) => {
//请求头
},
response: (res) => {
console.log(res);
return res.data[0]; //返回的图片信息
},
},
},
},
方法二:由于后台强调图片上传的时候,需要给他传的 img参数 必须是base64格式的;所以我就只能放弃第一种方法,使用下面的这个方法。
这个方法需要结合element ui的图片上传插件一起使用。
<div class="edit_container" style="margin-bottom: 20px">
<!-- 图片上传组件辅助-->
<el-upload
class="avatar-uploader"
:action="serverUrl"
name="img"
:before-upload="beforeUpload"
>
</el-upload>
<!--富文本编辑器组件-->
<el-row v-loading="uillUpdateImg">
<quill-editor
v-model="content"
ref="myQuillEditor"
:options="editorOption"
>
</quill-editor>
</el-row>
</div>
//---
editorOption: {
modules: {
imageDrop: true,
imageResize: {
displaySize: true,
},
toolbar: {
container: toolbarOptions, // 工具栏
handlers: {
image: function (value) {
if (value) {
// 触发input框选择图片文件
document.querySelector(".avatar-uploader input").click();
} else {
this.quill.format("image", false);
}
},
},
},
},
theme: "snow",
},
// 上传图片前
beforeUpload(file) {
//element 上传图片的方法
console.log(file);
var _this = this;
// 获取富文本组件实例
let quill = this.$refs.myQuillEditor.quill;
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
var obj = {
imgData: e.target.result, //给后台传的参数 base64格式的img参数
};
findList.uploadImage(qs.stringify(obj)).then((data) => {
console.log(data, "上传的图片");
console.log(data.ResultObj);
if (data.ResultCode == 1) {
// 获取光标所在位置
let length = quill.getSelection(true).index;
// 插入图片 res.info为服务器返回的图片地址
quill.insertEmbed(length, "image", data.ResultObj);
// 调整光标到最后
quill.setSelection(length + 1);
} else {
this.$message({
message: "图片上传失败!",
type: "error",
});
}
});
};
return file;
},