Vue基于vue-quill-editor富文本编辑器使用心得
vue-quill-editor 的 guthub地址,现在市面上有很多的富文本编辑器,我个人还是非常推荐 Vue 自己家的 vue-quill-deitor,虽然说只支持 IE10+, 但这种问题,甩给别人吧!
那么我们直击正题,在 vue 中使用 quill 呢,我们需要 npm 进行安装,安装命令如下:
npm install vue-quill-editor
再安装依赖项
npm install quill
使用:
在 main.js 中进行引入
import Vue from 'vue' 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)
下面的 css 一定还要引用,否则编辑器将会没有 css。
在 vue 页面中代码如下:
<template> <div class="edit_container"> <quill-editor v-model="content" ref="myQuillEditor" :options="editorOption" @blur="onEditorBlur($event)" @focus="onEditorFocus($event)" @change="onEditorChange($event)"> </quill-editor> <button v-on:click="saveHtml"> 保存 </button> </div> </template><script>
export default {
name: 'App',
data(){
return {
content:</span><p>hello world</p><span style="color: rgba(0, 0, 0, 1)">
,
editorOption: {}
}
},computed: {
editor() {
return this.$refs.myQuillEditor.quill;
},
},methods: {
onEditorReady(editor) { // 准备编辑器
},
onEditorBlur(){}, // 失去焦点事件
onEditorFocus(){}, // 获得焦点事件
onEditorChange(){}, // 内容改变事件
saveHtml:function(event){
alert(this.content);
}
}
}
</script><style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
其中的 v-model 就是我们自己的 html 代码,你可以将这个 html 直接放到数据库,这样也就没有什么问题了。如果想要禁用编辑器可以通过以下代码:
onEditorFocus(val,editor){ // 富文本获得焦点时的事件 console.log(val); // 富文本获得焦点时的内容 editor.enable(false); // 在获取焦点的时候禁用 }
主题设置
在 vue 项目中,具体引入 Quill 的文件中,需要使用哪种主题就写哪个。默认是 snow 主题的。
data(){ return { content: `<p>hello world</p>`, editorOption: { theme:'snow' } } }
工具栏设置
modules:{ toolbar:[ ['bold', 'italic', 'underline', 'strike'], //加粗,斜体,下划线,删除线 ['blockquote', 'code-block'], //引用,代码块[{ </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">header</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 128, 1)">1</span> }, { <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">header</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 128, 1)">2</span> }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 标题,键值对的形式;1、2表示字体大小</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">list</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">ordered</span><span style="color: rgba(128, 0, 0, 1)">'</span>}, { <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">list</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">bullet</span><span style="color: rgba(128, 0, 0, 1)">'</span> }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">列表</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">sub</span><span style="color: rgba(128, 0, 0, 1)">'</span>}, { <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">script</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">super</span><span style="color: rgba(128, 0, 0, 1)">'</span> }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 上下标</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">indent</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-1</span><span style="color: rgba(128, 0, 0, 1)">'</span>}, { <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">indent</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">+1</span><span style="color: rgba(128, 0, 0, 1)">'</span> }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 缩进</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">direction</span><span style="color: rgba(128, 0, 0, 1)">'</span>: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">rtl</span><span style="color: rgba(128, 0, 0, 1)">'</span> }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文本方向</span>
[{ </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">size</span><span style="color: rgba(128, 0, 0, 1)">'</span>: [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">small</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(0, 0, 255, 1)">false</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">large</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">huge</span><span style="color: rgba(128, 0, 0, 1)">'</span>] }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 字体大小</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">header</span><span style="color: rgba(128, 0, 0, 1)">'</span>: [<span style="color: rgba(128, 0, 128, 1)">1</span>, <span style="color: rgba(128, 0, 128, 1)">2</span>, <span style="color: rgba(128, 0, 128, 1)">3</span>, <span style="color: rgba(128, 0, 128, 1)">4</span>, <span style="color: rgba(128, 0, 128, 1)">5</span>, <span style="color: rgba(128, 0, 128, 1)">6</span>, <span style="color: rgba(0, 0, 255, 1)">false</span>] }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">几级标题</span>
[{ </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">color</span><span style="color: rgba(128, 0, 0, 1)">'</span>: [] }, { <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">background</span><span style="color: rgba(128, 0, 0, 1)">'</span>: [] }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 字体颜色,字体背景颜色</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">font</span><span style="color: rgba(128, 0, 0, 1)">'</span>: [] }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">字体</span> [{ <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">align</span><span style="color: rgba(128, 0, 0, 1)">'</span>: [] }], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">对齐方式</span>
] }, theme:'snow' } }[</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">clean</span><span style="color: rgba(128, 0, 0, 1)">'</span>], <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除字体样式</span> [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">image</span><span style="color: rgba(128, 0, 0, 1)">'</span>,<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">video</span><span style="color: rgba(128, 0, 0, 1)">'</span>] <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">上传图片、上传视频</span>
图片推拽上传
需要安装 quill-image-drop-module 模块,那么改一下 imageDrop 设置为 true,你就可以把你电脑上的图片网上一坨就可以了。
import {quillEditor} from 'vue-quill-editor' import * as Quill from 'quill' //引入编辑器 import {ImageDrop} from 'quill-image-drop-module'; Quill.register('modules/imageDrop', ImageDrop); export default { name: 'App', data(){ return{ editorOption:{ modules:{ imageDrop:true, }, theme:'snow' } } }
那上传文件那你就不用想了,你也许想先把图片放上去,其实这个文件托上去就已经是个 base64 了,等你在前台读数的时候直接 decode 就好 ~
图片调整大小 ImageResize
return{
editorOption:{
modules:{
imageResize: {}
},
theme:'snow'
}
}
以上就是我对 vue-quill-editor 的认识,觉得对你有帮助的,给个推荐吧!