wangeditor 富文本编辑器使用

news2024/9/23 15:33:35

使用环境vue3 + ts  ,添加了字数限制

尝试了两种,使用方法类似(参考文档),工具栏图标有不同,最后选用了第一种。

一、wangeditor 安装

 npm i wangeditor --save

使用

这里封装了个简单组件

<template>
  <div class="editor-container">
    <div id="editor"></div>
    <div :class="overflow ? 'editorText alert' : 'editorText'" v-if="maxLength > 0">
      {{ editorLen }} / {{ maxLength }}
    </div>
  </div>
</template>

<script lang="ts" setup>
import { ref, onMounted, defineExpose, watch } from 'vue'
import EWangEditor from 'wangeditor'   //引入

const props = defineProps({
  htmls: {  
    type: String,
    default: ''
  },
  height: {          //编辑框高度
    type: Number,
    default: 200
  },
  maxLength: {       //字数限制
    type: Number,
    default: -1
  },
  placeholder: {
    type: String,
    default: '请输入内容...'
  },
  menuList: {        // 工具栏配置           
    type: Array,
    default: () => []
  }
})
const emit = defineEmits(['contentChange'])
const editor = ref()
const editorLen = ref(0)       //字数统计
const overflow = ref(false)    //文本溢出

const initEditor = function () {    //初始化 创建实例
  if (editor.value) return
  else {
//这里的EWangEditor同引入时的名称一致
    editor.value = new EWangEditor('#editor')
    editor.value.customConfig = editor.value.customConfig
      ? editor.value.customConfig
      : editor.value.config
//change监听  做字数限制处理
    editor.value.customConfig.onchange = (html) => {
      console.log(html, 'editor change')
      if (props.maxLength > 0) {
        let reg = /<[^<>]+>/g                     //去标签
        let value = html.replace(reg, '')
        value = value.replace(/&nbsp;/gi, '')    //去空格
        editorLen.value = value.length
        overflow.value = value.length > props.maxLength
      }
      editor.value.editorContent = html
      emit('contentChange', editor.value.txt.html())
    }

    editor.value.config.menus = [...props.menuList]
    editor.value.config.height = props.height
    editor.value.config.placeholder = props.placeholder
    editor.value.config.showFullScreen = false

    editor.value.create()
    resetEditor()
    console.log(editor.value, 'editor.value')
  }
}

onMounted(() => {
  initEditor()
})
//设置初始内容
const resetEditor = function (val?: string) {
  editor.value.txt.html(val || props.htmls)
}
//销毁
const destroyEditor = function () {
  editor.value.destroy()
  editor.value = null
}
//清空
const clearEditor = function () {
  editor.value.txt.clear()
}

defineExpose({ clearEditor,  destroyEditor, resetEditor })

</script>

<style scoped>
.editor-container {
  width: 100%;
  position: relative;
}
.editorText {
  position: absolute;
  bottom: 0;
  right: 10px;
  color: #909399;
  z-index: 10001;
}
.alert {
  color: #f56c6c;
}
:deep(.vcp-fullscreen-toggle) {          //这里隐藏了 全屏
  display: none;
}
</style>

效果图:

我这里工具栏按需求只放了自己需要的功能 

二、vue-quill-editor安装

npm install vue-quill-editor --save
全局引入:
 //引入quill-editor编辑器
 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)
 
使用

此处代码不全,不可正常运行,使用参考文档

 <quill-editor  class="editor"  v-model="content" ref="customQuillEditor" :options="editorOption" />


const toolbarOptions = [
  ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线
  ["blockquote", "code-block", "formula"], // 引用  代码块 插入公式
  [{ header: 1 }, { header: 2 }], // 1、2 级标题
  [{ list: "ordered" }, { list: "bullet" }], // 有序、无序列表
  [{ script: "sub" }, { script: "super" }], // 上标/下标
  [{ indent: "-1" }, { indent: "+1" }], // 缩进
  [{ direction: "rtl" }], // 文本方向
  [{ size: [false,"14px","16px","18px","20px","22px","26px","28px","30px"] }], // 字体大小
  [{ header: [1, 2, 3, 4, 5,6, false] }], // 标题
  [{ color: [] }, { background: [] }], // 字体颜色、字体背景颜色
  [{ font: ["SimSun","SimHei","Microsoft-YaHei","KaiTi","FangSong","Arial","Times-New-Roman","sans-serif",] }], // 字体种类
  [{ align: [] }], // 对齐方式
  ["clean"], // 清除文本格式
  ["link", "image", "video", "report"] // 链接、图片、视频、自定义行为
]


const editorOption = {
        placeholder:'你想说什么?',
          toolbar: {
            container: toolbarOptions,  // 工具栏
        }
}


效果图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1131738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈AcrelEMS-GYM文体建筑能效管理解决方案-安科瑞 蒋静

1 概述 AcrelEMS-CA 文体建筑能效管理聚焦建筑的能量和信息的流向搭建平台解决方案。该系统解决方案集变电站综合自动化、电力监控、电能质量分析及治理、电气安全、能耗分析、照明控制、设备运维于一体。打破子系统孤立&#xff0c;配置方便&#xff0c;运维便捷&#xff1b;…

vue3.0运行npm run dev 报错Cannot find module node:url

vue3.0运行npm run dev 报错Cannot find module 问题背景 近期用vue3.0写项目&#xff0c;npm init vuelatest —> npm install 都正常,npm run dev的时候报错如下&#xff1a; failed to load config from F:\code\testVue\vue-demo\vite.config.js error when starting…

golang搭建http服务

golang环境搭建好之后,搭建htto服务 1.创建目录 创建main文件 创建成功,里面改成package main 终端执行操作创建好go.mod go mod init golang package golangimport ("fmt""net/http" )func sayHello(w http.ResponseWriter, r *http.Request) {_, _ fm…

TP4057替代DP4057 500mA线性锂离子电池充电器芯片

描述 DP4057是一款完整的单节锂离子电池带电池正负极反接保护采用恒定电流/恒定电压线性充电器。其SOT封装与较少的外部元件数目使得DP4057成为便携式应用的理想选择。DP4057 可以适合USB电源和适配器电源工作。 由于采用了内部PMOSFET架构&#xff0c;加.上防倒充电路&#xf…

基于机器视觉的12306验证码识别 计算机竞赛

文章目录 0 简介1 数据收集2 识别过程3 网络构建4 数据读取5 模型训练6 加入Dropout层7 数据增强8 迁移学习9 结果9 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于机器视觉的12306验证码识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向…

ES6之Set集合(通俗易懂,含实践)

Set是什么&#xff1f;它的方法有哪些&#xff1f;它在实例开发中有什么作用&#xff1f; 让我为大家介绍一下吧&#xff01; ES6提供了新的数据结构 Set(集合) 。它类似于数组&#xff0c;但成员的值是唯一的。 创建方法&#xff1a; let s new Set()console.log(s)它属于什…

使用时间潜在瓶颈网络进行图像分类

介绍 简单的循环神经网络(RNN)对学习 时间压缩表示表现出强烈的归纳偏差。方程 1显示了递推公式,其中h_t是整个输入序列 的压缩表示(单个向量)x。 方程 1:递推方程。(来源:Aritra 和 Suvaditya)另一方面,Transformers(Vaswani 等人)对于学习时间压缩表示几乎没有归…

探索随机森林: 机器学习中的集成学习神器

机器学习 第七课 随机森林 概述机器学习机器学习的主要分类监督学习无监督学习强化学习 集成学习提高准确性增强稳定性提升泛化能力 集成学习的主要方法BaggingBoostingStacking 随机森林的理论基础决策树的基本原理随机森林的生成过程随机森林的优势与局限性 随机森林的实际应…

IDEA 构建web项目-详细教程

1、创建一个新项目 1、点击File,选择New,然后点击Project 2、选择Empty Project,然后点击Next 3、新建一个项目 4、在新建完项目后&#xff0c;点击Finish后会弹出Open Project这个窗口&#xff0c;建议选择New Window 5、在Project Structure中选择Project Settings --> M…

rosbag记录与回放数据以及通过GMapping算法创建地图与导航

1、引言 通过前面几章的介绍&#xff0c;明白了ROS的工作原理&#xff0c;并且我们也能遥控机器人了&#xff0c;那机器人如何在实际环境中自主导航呢&#xff1f;要做到这点&#xff0c;机器人必须知道它自己在哪以及需要到哪儿去。 意味着&#xff0c;机器人需要有一个周围环…

3分钟教你用Python+Appium实现自动化测试

一、环境准备 1.脚本语言&#xff1a;Python3.x IDE&#xff1a;安装Pycharm 2.安装Java JDK 、Android SDK 3.adb环境&#xff0c;path添加E:\Software\Android_SDK\platform-tools 4.安装Appium for windows&#xff0c;官网地址 Redirecting 点击下载按钮会到GitHub…

中创 | 数据泄露事件频发:卡西欧数据泄露涉及149个国家用户

49%的企业在过去两年中遭受了数据泄露 网络安全事件导致关键业务意外停机&#xff0c;平均损失为每小时20万美元\小时 一、卡西欧发生数据泄露事件 作为享有盛名的国际品牌&#xff0c;卡西欧40年来总销量突破1亿只&#xff0c;尽管卡西欧享誉全球&#xff0c;拥有顶级的网…

mac安装nodejs,跑vue程序

1. 下载node.js for mac&#xff0c;地址&#xff1a;Node.js。一路安装就可以了&#xff0c;无需修改。 2. mac终端&#xff0c;查看node和npm的版本。 3. 配置环境变量&#xff0c; vim .bash_profile增加PATH$PATH:/usr/local/bin/ 4. 但是毕竟npm安装一些东西还是太慢了所…

笔记本电脑的摄像头找不到黑屏解决办法

这种问题一般来说就是缺少驱动&#xff0c;就要下载驱动。 问题&#xff1a; 解决办法&#xff1a; 1.进入联想官网下载驱动 网站&#xff1a;https://newsupport.lenovo.com.cn/driveDownloads_index.html?v9d9bc7ad5023ef3c3d5e3cf386e2f187 2.下载主机编号检测工具 3.下…

类图表示法

设计模式&#xff0c;用设计图表示的话&#xff0c;主要用到类图。常见UML类图如下&#xff1a; 1、类图&#xff1a;矩形框&#xff0c;代表一个类&#xff08;Class&#xff09;。类图分为三层&#xff0c;第一层显示类的名称&#xff0c;如果是抽象类&#xff0c;则用斜体显…

ThinkPHP文件上传验证器

在thinkphp中的文件上传功能,添加验证器的过程中.踩得小坑&#xff0c;简单记录。 具体内容如下 代码如下. 视图层 就是简单的form表单,用来上传文件。 <form action"/admin/files/upFile" enctype"multipart/form-data" method"post">&…

项目部署Linux步骤

1、最小化安装centos7-环境准备 安装epel-release 安装epel-release&#xff0c;因为有些rpm包在官方库中找不到。前提是保证可以联网 yum install -y epel-release 修改IP net-tools net-tool&#xff1a;工具包集合&#xff0c;包含ifconfig等命令 yum install -y net-…

桶装水订水送水小程序开发搭建;

上门送水小程序桶装水配送是一款的同城上门配送平台&#xff0c;为用户提供便捷的桶装水配送服务。解决用户在获取干净健康的饮用水方面的需求&#xff0c;提供高效、便捷的在线预约和下单服务。 小程序平台开发&#xff0c;具备强大的技术支持和良好的用户体验。用户可以通过…

如何书写一篇好的博客?

前言 大家在写博客&#xff0c;一定不要为了火&#xff0c;才去写博客&#xff0c;用数量去博取访问量。我们可能会短暂的收获成就&#xff0c;但是质量上却没有被认可&#xff0c;这是非常不可取的。当未来面试官看我们的博客的时候&#xff0c;看到我们虽然访问量多&#xff…

分享一下怎么做一个房间预定链接

在旅游行业中&#xff0c;房间预定是非常重要的一环。随着互联网的普及和旅游业的发展&#xff0c;越来越多的人选择在网上预订房间。本文将介绍如何制作一个房间预定链接&#xff0c;以及推广该链接的方法和策略&#xff0c;帮助读者更好地了解房间预定的需求和实现方式。 一、…