首页 > 其他分享 >Vue轻量级富文本编辑器-Vue-Quill-Editor

Vue轻量级富文本编辑器-Vue-Quill-Editor

时间:2023-11-15 15:05:08浏览次数:42  
标签:文本编辑 Vue dist return 轻量级 str import quill editor

先看效果图:女神镇楼

1.下载Vue-Quill-Editor

npm install vue-quill-editor --save

2.下载quill(Vue-Quill-Editor需要依赖)

npm install quill --save

3.代码

<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>
    </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 {
    components: {
        quillEditor
    },
    data() {
        return {
            content: `<p></p><p><br></p><ol><li><strong><em>Or drag/paste an image here.</em></strong></li><li><strong><em>rerew</em></strong></li><li><strong><em>rtrete</em></strong></li><li><strong><em>tytrytr</em></strong></li><li><strong><em>uytu</em></strong></li></ol>`,
            editorOption: {}
        }
    },
    methods: {
        onEditorReady(editor) { // 准备编辑器
 
        },
        onEditorBlur(){}, // 失去焦点事件
        onEditorFocus(){}, // 获得焦点事件
        onEditorChange(){}, // 内容改变事件
    },
    computed: {
        editor() {
            return this.$refs.myQuillEditor.quill;
        },
    }
}
</script>

OK,搞定,简洁的富文本编辑器就展现在你眼前了,另外附上API。https://www.npmjs.com/package/vue-quill-editor

4.自定义 toolbar 菜单

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', false, 'large', 'huge'] }], // 字体大小
                          [{ 'header': [1, 2, 3, 4, 5, 6, false] }],     //几级标题
                          [{ 'color': [] }, { 'background': [] }],     // 字体颜色,字体背景颜色
                          [{ 'font': [] }],     //字体
                          [{ 'align': [] }],    //对齐方式
                          ['clean'],    //清除字体样式
                          ['image','video']    //上传图片、上传视频
                          ]
                      }
                },

5.存储及将数据库中的数据反显为HTML字符串

后台接收到数据后会将字符中的标签进行转码,所以我们要先进行一个解码的操作让他变成标签形式的字符串:
例如后台接收的数据如下:"

title<" ,对应解码后就是<h1>title</h1>

//把实体格式字符串转义成HTML格式的字符串
escapeStringHTML(str) {
    str = str.replace(/&lt;/g,'<');
    str = str.replace(/&gt;/g,'>');
    return str;
}

然后将返回值赋值给对应的参数:

<div v-html="str" class="ql-editor">
    {{str}}
</div>

上面的str就是转码函数返回的值,我们要先在data中定义,所以我现在将新增跟展示放在一起,代码如下:

 <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>
        <!-- 从数据库读取展示 -->
        <div v-html="str" class="ql-editor">
            {{str}}
        </div>
    </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 {
    components: {
        quillEditor
    },
    data() {
        return {
            content: `<p></p><p><br></p><ol><li><strong><em>Or drag/paste an image here.</em></strong></li><li><strong><em>rerew</em></strong></li><li><strong><em>rtrete</em></strong></li><li><strong><em>tytrytr</em></strong></li><li><strong><em>uytu</em></strong></li></ol>`,
            str: '',
            editorOption: {}
        }
    },
    methods: {
        onEditorReady(editor) { // 准备编辑器
 
        },
        onEditorBlur(){}, // 失去焦点事件
        onEditorFocus(){}, // 获得焦点事件
        onEditorChange(){}, // 内容改变事件
        // 转码
        escapeStringHTML(str) {
            str = str.replace(/&lt;/g,'<');
            str = str.replace(/&gt;/g,'>');
            return str;
        }
    },
    computed: {
        editor() {
            return this.$refs.myQuillEditor.quill;
        },
    },
    mounted() {
        let content = '';  // 请求后台返回的内容字符串
        this.str = this.escapeStringHTML(content);
    }
}
</script>

最后提醒大家一句,插件只兼容IE10以上,不能向下兼容,如果要向下兼容,只能放弃使用这个插件。

标签:文本编辑,Vue,dist,return,轻量级,str,import,quill,editor
From: https://www.cnblogs.com/liliuyu/p/16265017.html

相关文章

  • Vue 2.x脱坑记-查漏补缺
    Q:组件的通讯有哪几种啊!基本最常用的是这三种;父传子: props子传父: emit兄弟通讯:eventbus:就是找一个中间组件来作为信息传递中介vuex:信息树传送门:基本通讯VuexQ:为什么我的 npm 或者 yarn 安装依赖会生成 lock文件,有什么用!lock文件的作用......
  • vue~封装一个文本框标签组件
    用到的技术父组件向子组件的传值类型检查和默认值:您可以为props指定类型检查和默认值。这可以确保传递给子组件的数据符合期望的类型,以及在没有传递数据时具有合理的默认值。例如:props:{message:{type:String,default:'DefaultMessage'},count:{typ......
  • vue~封装一个文本框添加与删除的组件
    标签组件的效果如下组件作用这是一个div,包含了两个文本框,后面是添加和删除按钮添加按钮复制出新的div,除了文本框没有内容,其它都上面一样删除按钮将当前行div删除组件实现<template><div><templatev-for="(item,index)intags"><el-row:gutter="4"style="margin:......
  • Vue双向数据绑定原理-上
    Vue响应式的原理(数据改变界面就会改变)是什么?时时监听数据变化,一旦数据发生变化就更新界面,这就是Vue响应式的原理。Vue是如何实现时时监听数据变化的通过原生JS的defineProperty方法,通过get和set方法来监听数据的变化。defineProperty方法的特点可以直接在一个对象上定义一......
  • Vue实验记录
    webpack安装首先下载node.jshttps://nodejs.org/en下载完成后进行安装,直接下一步就可以安装完成后,在cmd中查看是否安装成功然后安装webpack安装脚手架创建项目选择第二个创建完成后的效果进入项目并运行在学习通中下载源码,把源码按照项目格式放到创建好的项目......
  • vuejs3.0 从入门到精通——项目搭建
    项目搭建一、环境准备软件名称软件版本nodev20.9.0npm10.1.0Windows10专业版22H2vue/cli5.0.8vitev4.5.0二、vite创建项目>npminitvite@latestsaas--templatevue√Selectaframework:»Vue√Selectavariant:»TypeScriptSca......
  • Vue-cli 用自定义的组件有遇到过哪些问题?
    在components目录新建你的组件文件(indexPage.vue),script一定要exportdefault{}在需要用的页面(组件)中导入:importindexPagefrom'@/components/indexPage.vue'注入到vue的子组件的components属性上面,components:在template视图view中使用,例如命名为inde......
  • 富文本编辑器的内容转换成图片
    需求:pc端通过富文本编辑器,编辑商品详情页,然后生成图片,用于移动端展示之用。用到的库:wangEditor5和Dom-to-image(后者没找到官网,使用方法可自行百度,相关博客还是比较多的)常规科普: 1.wangEditor编辑器绑定的valueHtml即为字符串形式的dom结构。我们解码后可直接预览效果; 2.......
  • Vue3+Element plus 实现表格可编辑
    <template><div><el-buttontype="primary"@click="handleAdd">新增</el-button></div><div><el-table:data="tableData"style="width:100%&quo......
  • vue3 与 vue2 的区别
    布尔型Attribute​布尔型attribute依据true/false值来决定attribute是否应该存在于该元素上。disabled就是最常见的例子之一。v-bind在这种场景下的行为略有不同:<button:disabled="isButtonDisabled">Button</button>当isButtonDisabled为真值或一个空字符串(......