最近在用vue + element-ui对公司的后台管理系统进行重构,听说这个后台管理系统是零几年的产物,历史悠久,看界面就看得出是前后端不分离时期,PHP后端工程师做的,不符合我们95后程序员的审美,而且里面的富文本编辑器也是很老的,而且很难用,没有视频上传功能,而且也没有上传图片功能,文本插入图片是用base64插入的,难用界面还丑。在重构管理后台,我一直在找一个颜值高的,好用的富文本编辑器,经过这几天的寻找,我终于找到了一个完美的编辑器,它就是——Quill。
UEditor
在找到这个编辑器的时候,我先是试用了百度的UEditor。UEditor 是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。
这个编辑器的优点是功能多,可以上传图片视频到服务器上,但是界面太老,不好看,功能缺点也有,例如上传图片和视频要后端配合改接口,不然搞不了,我去找后端,后端不肯配合我,真让人头大,所以我放弃这个富文本编辑器了。
UEditor
wangEditor
wangEditor是一个国人开发的开源的 轻量级 web 富文本编辑器 ,配置方便,使用简单。界面超级简洁,但是我不太喜欢这个界面,而且也不支持上传图片和视频。所以我放弃了。
wangEditor
TinyMCE
TinyMCE是可定制,灵活的一款富文本编辑器。界面设计很美观,功能也是超级强大的,支持扩展许多高级功能和附加组件,支持拼写检查,图片视频上传等等,应该是目前前端最强的编辑器了,这个编辑器什么都好,但是要钱,公司很抠,不会舍得出一分钱的,哈哈哈。
TinyMCE
CKEditor
CKEditor还算不错,但是功能比较基础,有图片上传功能,没有视频上传功能,但是它有行内编辑功能,还可以拖拽缩小图片,这个功能还是挺强大的,至少其他编辑器好像都没有这个功能。
CKEditor
Quill
Quill,用起来最舒服的编辑器,想要的功能都有,搭配丰富的插件使用起来美滋滋,界面简洁,美观,功能虽然不是很多,但是不慌,我们可以给它搭配各种各样的插件,拓展功能,而且这个编辑器开源免费,插件也很多。
搭配quill-video-image-module插件就可以实现视频上传,图片上传到服务器,而且视频还是用video标签插入的,而不是iframe,还实现了中文提示框,中文功能描述。quill及其功能拓展插件使用方法如下:
npm i vue-quill-editor
npm i quill
npm i quill-video-image-module
<template><div class="createArticle"><quill-editor class="ql-editor" v-model="content" :options="editorOption"></quill-editor></div>
</template>
<script>import 'quill/dist/quill.core.css' // import stylesimport 'quill/dist/quill.snow.css' // for snow themeimport 'quill/dist/quill.bubble.css' // for bubble themeimport {
quillEditor,
Quill
} from 'vue-quill-editor';
import {
container,
addQuillTitle
} from 'quill-video-image-module';
import {
ImageExtend,
QuillWatch
} from 'quill-video-image-module';
import {
VideoExtend,
QuillVideoWatch
} from 'quill-video-image-module'
// 引入video模块并注册import video from 'quill-video-image-module/video'Quill.register(video, true)
Quill.register('modules/ImageResize', ImageResize)
Quill.register('modules/ImageExtend', ImageExtend)
Quill.register('modules/VideoExtend', VideoExtend)
export default {
components: {
quillEditor
},
data() {
return {
content: '',
// 富文本框参数设置editorOption: {modules: {
ImageResize: {},
ImageExtend: {
loading: true, // 可选参数 是否显示上传进度和提示语name: 'img', // 图片参数名size: 1, // 可选参数 图片大小,单位为M,1M = 1024kbaction: 'http://127.0.0.1:5000/upload/img', // 服务器地址, 如果action为空,则采用base64插入图片// response 为一个函数用来获取服务器返回的具体图片地址// 例如服务器返回{code: 200; data:{ url: 'baidu.com'}}// 则 return res.data.urlresponse: res => {return res.data.url;
},
headers: () => {}, // 可选参数 设置请求头部start: () => {}, // 可选参数 自定义开始上传触发事件end: () => {}, // 可选参数 自定义上传结束触发的事件,无论成功或者失败error: () => {}, // 可选参数 自定义网络错误触发的事件change: () => {
formData.append('key', localStorage.getItem('token'));
}, // 可选参数 每次选择图片触发,也可用来设置头部,但比headers多了一个参数,可设置formDatasizeError: () => {alert('图片不能大于1M')
}
},
VideoExtend: {
loading: true,
name: 'img',
size: 100, // 可选参数 视频大小,单位为M,1M = 1024kbaction: 'http://127.0.0.1:5000/upload/img', // 视频上传接口headers: (xhr) => {// set custom token(optional)
},
change: (xhr, formData) => {
formData.append('key', localStorage.getItem('token'));
},
response: (res) => {
// video uploaded path// custom your ownreturn res.data.url;
},
sizeError: () => {
alert('视频不能大于100M')
}
},
toolbar: {
container: container, // container为工具栏,此次引入了全部工具栏,也可自行配置handlers: {image: function() {
// 劫持原来的图片点击按钮事件QuillWatch.emit(this.quill.id);
},
video: function() {
QuillVideoWatch.emit(this.quill.id)
}
}
}
}
}
};
},
methods: {},
created() {
},
mounted() {
addQuillTitle();
}
};
</script>
<style>.createArticle {
padding: 40px 40px;
}
.ql-editor {
min-height: 800px;
}
</style>
如果这篇文章刚好能帮到你,麻烦顺手点个赞吧,谢谢了。