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>&lt;p&gt;hello world&lt;/p&gt;<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>
          [</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>
] }, theme:'snow' } }

图片推拽上传

需要安装  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 的认识,觉得对你有帮助的,给个推荐吧!