这里简单记录下在使用quill-editor过程中遇到的坑。和一些使用的事项。
官方文档点击这里:quilljs官方文档
安装什么的就不写了,自己去看。
import { quillEditor } from "vue-quill-editor";
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
const toolbarOptions = [
["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: [] }],
["link", "image"],
["clean"]
];
export default {
data() {
return {
mulObj:'',
editorOption: {
modules: {
toolbar: {
container: toolbarOptions,
handlers: {
image: function(value) {
if (value) {
document.querySelector("input[name='file']").click();
} else {
this.quill.format("image", false);
}
}
}
}
}
},
};
},
//组件注册
components: {
quillEditor,
},
}
注意:这里对image进行了特殊处理,后面将通过添加的文件上传按钮来实现图片的文件上传。当点击quill中图片图标的时候将触发自定义按钮的点击事件
说明
1、这里的上传控件
2、quill-editor控件可以通过vue的双向数据绑定实现内容变化的监听,这里的mulObj就是文档编辑器的内容(html格式)。
3、ref属性是当前文档编辑器的一个标识,后面需要通过这个字段来获取文档编辑器。
4、options属性绑定是data中的配置项editorOption。
其他html代码部分需要自己补全,这里就不全部贴出来了
文档编辑器的界面如下:
上面我们对图片点击事件进行了特殊处理,当点击文档编辑器的图片时其实触发的是
当点击图片图标的时候,el-upload控件进行了往服务器上传图片的操作,如果图片上传成功就会调用success函数(:on-success="success"),这里不懂的小伙伴请移步element-ui官网。
接下来进行js逻辑逻辑部分。
methods: {
success(res, file, fileList) {
let quill = this.$refs.lang.quill;
let range = quill.getSelection();
let length = range.index;
quill.insertEmbed(length, "image", res.data);
quill.setSelection(length + 1);
}
},
}
获取文档编辑器对象
let quill = this.$refs.lang.quill;
上面html部分有一个ref="lang"的属性,这里通过这种方式拿到文档编辑器对象。
获取当前光标的位置
let range = quill.getSelection();
let length = range.index;
插入图片(这里的res.data是服务器返回的图片路径)
quill.insertEmbed(length, "image", res.data);
quill.setSelection(length + 1);
由于我们对文档编辑器的内容进行了双向数据绑定,所以此时mulObj就是包含了各种样式和图片的html字符串。
以上就是基本步骤,这里记录方便以后查看。好记性不如烂笔头。