vue3使用TinyMCE富文本

TinyMCE 介绍

TinyMCE 是一个功能强大的富文本编辑器,它允许您在网页应用程序中创建和编辑具有丰富格式的内容。官网    github项目地址   文档地址

下载tinymce文件

从网页下载最新版zip,也可以打开下面链接下载。 打开网页

tinymce.zip
zh-Hans

将下载的文件解压缩到Vue项目 public文件中

在这里插入图片描述

修改lang

将 zh-Hans 改为 zh_CN

在这里插入图片描述
在这里插入图片描述

组件

<template><textarea :id="id" class="hidden"></textarea>
</template>
<script lang="ts" setup>
import { ref, watch, onMounted, onBeforeUnmount } from 'vue';
import type { EditorManager } from 'public/js/tinymce/tinymce';const emit = defineEmits(['update:value']);interface Props {value: string | undefined;
}
/** 设置默认值 */
const props = withDefaults(defineProps<Props>(), {
});// 根据当前时间戳转16进制
function getId() {return Date.now().toString(16);
}
// id
const id = ref<string>('tinymce_' + getId());
// 内容
const value = ref<string>(props.value || '');
// tinymce对象
var tinymce: EditorManager;/*** 加载Script* @param url Script地址*/
function loadScript(url: string) : Promise<boolean> {if (window?.$tinymceLoad) {return window.$tinymceLoad;}window.$tinymceLoad = new Promise<boolean>((resolve, reject) => {try {const script = document.createElement('script');script.src = url;script.onload = function () {resolve(true);};script.onerror = function () {reject(false);};document.body.appendChild(script);} catch (error) {reject(false);}});return window?.$tinymceLoad;
}/** Script  */
const tinymceLoad = loadScript('/js/tinymce/tinymce.min.js');watch(() => props.value, (_nVal, _oVal) => {if (_nVal != value.value) {value.value = _nVal || '';if (tinymce.get(id.value)) {tinymce.get(id.value)?.setContent(value.value);}}
});watch(value, (_nVal, _oVal) => {if (_nVal != _oVal)emit('update:value', _nVal);
});// 挂载
onMounted(async () => {const isSuccess = await tinymceLoad;if (!isSuccess || !window.tinymce) {console.error('tinymce 加载失败!!!!')return;}if(value.value){const el = document.getElementById(id.value);if(el)el.innerText = value.value}tinymce = window.tinymce;tinymce._setBaseUrl('/js/tinymce/');tinymce.init({selector: `#${id.value}`,language: 'zh_CN',language_url: '/js/tinymce/langs/zh-Hans.js',// 编辑器的高度height: '100%',// 编辑器的宽度width: '100%',// 菜单栏menubar: false,// 去掉右上脚升级按钮promotion: false,// 底部状态栏statusbar: true,// 元素路径elementpath: true,// 去掉右下脚Logo图标branding: false,// 调整大小resize: false,// 工具栏toolbar: 'undo redo restoredraft |blocks fontfamily fontsize forecolor backcolor removeformat| bold italic underline strikethrough blockquote| alignleft aligncenter alignright alignjustify accordion| bullist numlist outdent indent | anchor link image media  |  codesample  visualblocks emoticons code preview searchreplace  pagebreak fullscreen  print  help ',// toobar 显示模式  floating  sliding scrolling  wraptoolbar_mode: 'wrap',// 插件plugins: 'advlist autolink lists link image charmap  preview anchor searchreplace visualblocks code fullscreen insertdatetime media table  code help wordcount pagebreak visualblocks emoticons codesample accordion ', //contextmenu: 'undo redo | inserttable | cell row column deletetable | help',setup: function (editor) {editor.on('change', function () {const content = editor.getContent();value.value = content;});}}); 
})/** 卸载 */
onBeforeUnmount(() => {tinymce?.remove('#' + id.value);
})</script>

使用

<template><div class="m-8px"><tiny-mce	v-model:value="text"></tiny-mce></div>
</template>
<script setup lang="ts">
import { ref } from 'vue';const text =ref<string>('Hello Word');
</script>

效果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java游戏制作——王者荣耀

一.准备工作 首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 创建一个名为“img”的文件夹来储存所需的图片素材。 二.代码呈现 package com.sxt;import javax.sw…

BetaFlight模块设计之三十六:SoftSerial

BetaFlight模块设计之三十六&#xff1a;SoftSerial 1. 源由2. API接口2.1 openSoftSerial2.2 onSerialRxPinChange2.3 onSerialTimerOverflow2.4 processTxState2.5 processRxState 3. 辅助函数3.1 applyChangedBits3.2 extractAndStoreRxByte3.3 prepareForNextRxByte 4. 总结…

电子学会C/C++编程等级考试2021年03月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:找和为K的两个元素 在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。 时间限制:1000 内存限制:65536输入 第一行输入序列的长度n和k,用空格分开。 第二行输入序列中的n个整数,用空格分开。输出 如…

居家适老化设计第三十二条---卫生间之扶手

以上产品图片均来源于淘宝 侵权联系删除 居家适老化中的扶手是指在家居环境中&#xff0c;为老年人提供支撑和帮助的装置&#xff0c;通常安装在家中的各个需要扶抓的位置&#xff0c;如楼梯、卫生间、浴室、厨房等处。扶手的设计应考虑老年人的体力、平衡和安全需求&#xf…

Windows安装Python环境(V3.6)

文章目录 一&#xff1a;进入网址&#xff1a;https://www.python.org/downloads/ 二&#xff1a;执行安装包 默认C盘&#xff0c;选择自定义安装目录 记得勾选add python path 下面文件夹最好不要有 . 等特殊符号 可以创建 python36 如果安装失败Option可以选默认的&#x…

一起学docker系列之十一使用 Docker 安装 Redis 并配置持久化存储

目录 前言1 基本安装步骤安装Redis镜像&#xff1a;查看已下载的Redis镜像&#xff1a;运行Redis容器&#xff1a;进入Redis容器&#xff1a;使用Redis CLI进行基本操作&#xff1a; 2 配置文件同步准备配置文件&#xff1a;修改Redis配置文件 /app/redis/redis.conf&#xff1…

Matplotlib不规则子图_Python数据分析与可视化

除了网格子图&#xff0c;matplotlib还支持不规则的多行多列子图网格。 plt.GridSpec()对象本事不能直接创建一个图形&#xff0c;他只是 plt.subplot()命令可以识别的简易接口。 这里创建了一个带行列间距的23网格&#xff1a; grid plt.GridSpec(2, 3, wspace0.4, hspace0…

免费分享一套基于springboot的餐饮美食分享平台系统,挺漂亮的

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的基于springboot的餐饮美食分享平台系统&#xff0c;分享下哈。 项目视频演示 【免费】基于springboot的餐饮美食分享平台 Java毕业设计_哔哩哔哩_bilibili【免费】基于springboot的餐饮美食分享平台 Java毕…

【Kotlin】内联函数

文章目录 内联函数noinline: 避免参数被内联非局部返回使用标签实现Lambda非局部返回为什么要设计noinline crossinline具体化参数类型 Kotlin中的内联函数之所以被设计出来&#xff0c;主要是为了优化Kotlin支持Lambda表达式之后所带来的开销。然而&#xff0c;在Java中我们似…

【腾讯云 HAI域探秘】基于高性能应用服务器HAI部署的 ChatGLM2-6B模型,我开发了AI办公助手,公司行政小姐姐用了都说好!

目录 前言 一、腾讯云HAI介绍&#xff1a; 1、即插即用 轻松上手 2、横向对比 青出于蓝 3、多种高性能应用部署场景 二、腾讯云HAI一键部署并使用ChatGLM2-6B快速实现开发者所需的相关API服务 1、登录 高性能应用服务 HAI 控制台 2、点击 新建 选择 AI模型&#xff0c;…

【开源】基于Vue和SpringBoot的个人健康管理系统

项目编号&#xff1a; S 040 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S040&#xff0c;文末获取源码。} 项目编号&#xff1a;S040&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 健康档案模块2.2 体检档案模块2.3 健…

【社会网络分析第6期】Ucient实操

一、导入数据处理二、核心——边缘分析三、聚类分析四、网络密度 一、导入数据处理 将数据导入Ucinet首先需要对数据进行处理。 承接上一期的数据格式&#xff1a;【社会网络分析第5期】gephi使用指南 原先得到的数据格式如下&#xff1a; 接下来打开ucinet&#xff1a; 之后…