vue/cli 4.5.8使用tinymce富文本编辑器无样式黏贴word表格

本文主要是介绍vue/cli 4.5.8使用tinymce富文本编辑器无样式黏贴word表格,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

vue/cli 4.5.8使用tinymce富文本编辑器无样式黏贴word表格

  • tinymce版本
  • 第二步
  • 第三步 组件封装
  • 第三步 组件的引用
  • 第三步 效果

tinymce版本

在这里插入图片描述
附上链接
tinymce4.5.12

附上命令:
npm install tinymce -S
npm install @tinymce/tinymce-vue -S
由于没有指定版本所以命令执行完可以修改package.json文件指定依赖版本,然后删掉node_module文件夹,重新执行npm install重新安装

第二步

在public目录下新建文件夹static/tinymce,目录建好后,找到node_modules文件夹下的tinymce/skins目录,将skins目录复制到我们创建的static/tinymce文件夹内,如下图所示:
在这里插入图片描述
在这里插入图片描述
附上语言包地址
zh_CN.js

第三步 组件封装

my-tinymce.vue

<template><div style="margin: 20px auto; padding-top:20px;width: 80%;"><textarea :id="Id" :value="value"></textarea><el-button @click="getContent">获取内容</el-button></div>
</template>
<script>
require('../../static/tinymce/langs/zh_CN.js') // 根据自己的组件路径修改
export default {data () {const Id = Date.now()return {Id: Id,Editor: null,DefaultConfig: {// GLOBALheight: 900,theme: 'modern',menubar: false,toolbar: `styleselect | fontselect | formatselect | fontsizeselect | forecolor backcolor | bold italic underline strikethrough | image  media | table | alignleft aligncenter alignright alignjustify | outdent indent | numlist bullist | preview removeformat  hr | paste code  link | undo redo | fullscreen `,plugins: `pasteimportcssimagecodetableadvlistfullscreenlinkmedialiststextcolorcolorpickerhrpreview`,// CONFIGforced_root_block: 'p',force_p_newlines: true,importcss_append: true,// CONFIG: ContentStyle 这块很重要, 在最后呈现的页面也要写入这个基本样式保证前后一致, `table`和`img`的问题基本就靠这个来填坑了content_style: `*                         { padding:0; margin:0; }html, body                { height:100%; }img                       { max-width:100%; display:block;height:auto; }a                         { text-decoration: none; }iframe                    { width: 100%; }p                         { line-height:1.6; margin: 0px; }table                     { word-wrap:break-word; word-break:break-all; max-width:100%; border:none; border-color:#999; }.mce-object-iframe        { width:100%; box-sizing:border-box; margin:0; padding:0; }ul,ol                     { list-style-position:inside; }`,images_upload_url: 'https://sm.ms/api/upload',images_upload_base_path: '',insert_button_items: 'image link | inserttable',// CONFIG: Pastepaste_retain_style_properties: 'none',paste_word_valid_elements: "table[width],tr,td[colspan|rowspan|width],th[colspan|rowspan|width],thead,tfoot,tbody,h1,h2,h3,h4,h5,img,p",        // word需要它paste_data_images: true,                  // 粘贴的同时能把内容里的图片自动上传,非常强力的功能paste_convert_word_fake_lists: false,     // 插入word文档需要该属性paste_webkit_styles: 'all',paste_merge_formats: true,nonbreaking_force_tab: false,//paste_auto_cleanup_on_paste: false,paste_auto_cleanup_on_paste : true,paste_remove_styles: true,paste_remove_styles_if_webkit: true,paste_strip_class_attributes: true,// CONFIG: Fontfontsize_formats: '10px 11px 12px 14px 16px 18px 20px 24px',// CONFIG: StyleSelectstyle_formats: [{title: '首行缩进',block: 'p',styles: { 'text-indent': '2em' }},{title: '行高',items: [{title: '1', styles: { 'line-height': '1' }, inline: 'span'},{title: '1.5', styles: { 'line-height': '1.5' }, inline: 'span'},{title: '2', styles: { 'line-height': '2' }, inline: 'span'},{title: '2.5', styles: { 'line-height': '2.5' }, inline: 'span'},{title: '3', styles: { 'line-height': '3' }, inline: 'span'}]}],// FontSelectfont_formats: `微软雅黑=微软雅黑;宋体=宋体;黑体=黑体;仿宋=仿宋;楷体=楷体;隶书=隶书;幼圆=幼圆;Andale Mono=andale mono,times;Arial=arial, helvetica,sans-serif;Arial Black=arial black, avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats`,// Tabtabfocus_elements: ':prev,:next',object_resizing: true,// Imageimagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions'}}},props: {value: {default: '',type: String},config: {type: Object,default: () => {return {theme: 'modern',height: 100}}},url: {default: '',type: String},accept: {default: 'image/jpeg, image/png',type: String},maxSize: {default: 2097152,type: Number},withCredentials: {default: false,type: Boolean}},headers: {'Content-type': 'application/json;charset=UTF-8'},mounted () {this.init()},beforeDestroy () {// 销毁tinymcethis.$emit('on-destroy')window.tinymce.remove(document.getElementById(`{this.Id}`))},methods: {// 上传主图myFunction (){var x=document.getElementById("mainfile")var f= document.getElementById("mainfile").files[0]var formData=new FormData()var xmlhttpvar self = thisif (window.XMLHttpRequest){//  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码xmlhttp=new XMLHttpRequest()}else{// IE6, IE5 浏览器执行代码xmlhttp=new ActiveXObject("Microsoft.XMLHTTP")}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4 && xmlhttp.status==200){self.sproduct.pictures=JSON.parse(xmlhttp.responseText).data.url}}formData.append('smfile',f)xmlhttp.open('POST', 'https://sm.ms/api/upload',false)xmlhttp.send(formData)},init () {const self = thisthis.Editor = window.tinymce.init({// 默认配置...this.DefaultConfig,// 图片上传images_upload_handler: function (blobInfo, success, failure) {if (blobInfo.blob().size > self.maxSize) {failure('文件体积过大')}if (self.accept.indexOf(blobInfo.blob().type) >= 0) {uploadPic()} else {failure('图片格式错误')}function uploadPic () {const xhr = new XMLHttpRequest()const formData = new FormData()formData.append('smfile', blobInfo.blob())xhr.open('POST', 'https://sm.ms/api/upload')xhr.onload = function () {if (xhr.status !== 200) {// 抛出 'on-upload-fail' 钩子self.$emit('on-upload-fail')failure('上传失败: ' + xhr.status)return}const json = JSON.parse(xhr.responseText)// 抛出 'on-upload-complete' 钩子console.log(json.data.url)self.$emit('on-upload-complete' , [json.data, success, failure])success(json.data.url)}formData.append('smfile', blobInfo.blob())xhr.send(formData)}},// prop内传入的的config...this.config,// 挂载的DOM对象selector: `#${this.Id}`,setup: (editor) => {// 抛出 'on-ready' 事件钩子editor.on('init', () => {self.loading = falseself.$emit('on-ready')editor.setContent(self.value)})// 抛出 'input' 事件钩子,同步value数据editor.on('input change undo redo', () => {self.$emit('input', editor.getContent())})}})},getContent () {console.log(tinymce.editors[0].getContent())}}
}
</script>

在这里插入图片描述
这是init方法中对富文本编辑器的黏贴插件配置
更多可以查看:插件配置

第三步 组件的引用

在这里插入图片描述

在这里插入图片描述

第三步 效果

在这里插入图片描述

这篇关于vue/cli 4.5.8使用tinymce富文本编辑器无样式黏贴word表格的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/325505

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

C++ Primer 多维数组的使用

《C++Primer多维数组的使用》本文主要介绍了多维数组在C++语言中的定义、初始化、下标引用以及使用范围for语句处理多维数组的方法,具有一定的参考价值,感兴趣的可以了解一下... 目录多维数组多维数组的初始化多维数组的下标引用使用范围for语句处理多维数组指针和多维数组多维数组严格来说,C++语言没