vue富文本编辑器插件vue-quill-editor使用

时间:2024-03-07 15:15:36

简介

版本:"vue-quill-editor": "^3.0.6"

vue-quill-editor 使用文档:前言 · Quill官方中文文档 · 看云 (kancloud.cn)

安装

npm  install vue-quill-editor@3.0.6  -s

配置富文本模块

<template>
  <!-- class="edit_container" -->
  <div style="line-height: normal">
    <quill-editor
      class="ql-editor"
      v-model="content"
      ref="quillEditor"
      :options="editorOption"
      @blur="onEditorBlur($event)"
      @focus="onEditorFocus($event)"
      @change="onEditorChange($event)"
    >
    </quill-editor>
  </div>
</template>

<script>
import { quillEditor } from \'vue-quill-editor\' // 调用编辑器
import \'quill/dist/quill.core.css\'
import \'quill/dist/quill.snow.css\'
import \'quill/dist/quill.bubble.css\'

export default {
  name: \'Editor\',
  props: {
    value: String
  },
  components: {
    quillEditor
  },
  data() {
    return {
      editorOption: {
        placeholder: \'请在这里输入\',
        modules: {
          toolbar: [
            [\'bold\', \'italic\', \'underline\', \'strike\'], // 加粗,斜体,下划线,删除线
            // [\'blockquote\', \'code-block\'], // 引用,代码块
            [{ header: 1 }, { header: 2 }], // 标题,键值对的形式;1、2表示字体大小
            [{ list: \'ordered\' }, { list: \'bullet\' }], // 列表
            [{ script: \'sub\' }, { script: \'super\' }], // 上下标
            [{ indent: \'-1\' }, { indent: \'+1\' }], // 缩进
            [{ direction: \'rtl\' }], // 文本方向
            [{ size: [\'small\', \'large\', \'huge\'] }], // 字体大小
            [{ header: [1, 2, 3, 4, 5, 6, false] }], // 几级标题
            [{ color: [] }, { background: [] }], // 字体颜色,字体背景颜色
            [{ font: [] }], // 字体
            [{ align: [] }], // 对齐方式
            [\'clean\'], // 清除字体样式
            [\'link\'] //, \'image\', \'video\'
          ]
        }
      },
      content: \'\',
      theme: \'snow\'
    }
  },
  methods: {
    onEditorReady(editor) {
      // 准备编辑器
    },
    onEditorBlur() {}, // 失去焦点事件
    onEditorFocus() {}, // 获得焦点事件
    onEditorChange({ quill, html, text }) {
      this.$emit(\'contentData\', html)
    } // 内容改变事件
  },
  computed: {
    editor() {
      return this.$refs.quillEditor.quill
    }
  },
  mounted() {},
  watch: {
    value(val) {
      this.content = val
    }
  }
}
</script>

使用说明

为模块注入value(富文本内容(html))、contentData(修改后触发的方法,这里修改父级变量)

模块toolbar属性可以调整工具栏显示工具详情请查文档

class="ql-editor"属性如果没有编辑器会过滤制表符和联系空格

修改css汉化显示

<style>
 p {
  margin: 10px;
}
.ql-snow .ql-tooltip::before {
  content: "链接地址";
}
.ql-snow .ql-tooltip a.ql-remove::before {
  content: "移除";
}
.ql-snow .ql-tooltip a.ql-action::after {
  content: "编辑";
}

.ql-snow .ql-tooltip.ql-editing a.ql-action::after {
  content: "保存";
}

.ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before {
  content: "14px";
}

.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before {
  content: "10px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before {
  content: "18px";
}
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before {
  content: "32px";
}

.ql-snow .ql-picker.ql-header .ql-picker-label::before,
.ql-snow .ql-picker.ql-header .ql-picker-item::before {
  content: "文本";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before {
  content: "标题1";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before {
  content: "标题2";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before {
  content: "标题3";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before {
  content: "标题4";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before {
  content: "标题5";
}
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before {
  content: "标题6";
}

.ql-snow .ql-picker.ql-font .ql-picker-label::before,
.ql-snow .ql-picker.ql-font .ql-picker-item::before {
  content: "标准字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before {
  content: "衬线字体";
}
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before {
  content: "等宽字体";
} 
</style>

配置界面使用示例

template部分

 <editor
                :value="announcementFormData.content"
                @contentData="contentChange($event)"
              ></editor>

data

 announcementFormData: {
        content: \'\',
      },

methods

    contentChange(event) {
      this.announcementFormData.content = event
    },

展示富文本html

相关html、css:https://wwa.lanzous.com/iqcexozpx3a

使用方式打开html传递url参数键为quillDom值为配置界面生成的html字符串(字符串需要使用encodeURIComponent方法处理)

效果图