vue中使用 tinymce富文本编辑器
参考 https://blog.csdn.net/weixin_53605215/article/details/123043676
1. npm下载
vue3.x :
npm install tinymce -S
npm install @tinymce/tinymce-vue -S
vue2.x的话,固定版本(vue2中不能使用@tinymce/tinymce-vue为4以上版本)
npm install tinymce@5.1.0 -S
npm install @tinymce/tinymce-vue@3.0.1 -S
2.将node_modules里面的tinymce文件复制到public目录下
3.富文本封装
html:
<template> <div> <editor v-model="editorVal" :init="init" /> </div> </template>
js:
<script> import { uploadFile } from '@/api/toppic'; import tinymce from 'tinymce/tinymce'; import Editor from '@tinymce/tinymce-vue'; import 'tinymce/themes/silver/theme'; // import 'tinymce/plugins/image'; // 图片 import 'tinymce/plugins/imagetools'; // 图片裁剪 import 'tinymce/plugins/media'; import 'tinymce/plugins/table'; import 'tinymce/plugins/lists'; import 'tinymce/plugins/advlist'; import 'tinymce/plugins/wordcount'; import 'tinymce/plugins/colorpicker'; import 'tinymce/skins/ui/oxide/skin.css'; import '../../../public/tinymce/plugins/lineheight/plugin'; // 行高 import '../../../public/tinymce/plugins/indent2em/plugin'; // 首行缩进 import '../../../public/tinymce/plugins/letterspacing/index'; // 文字间距 import '../../../public/tinymce/plugins/image/index'; // 图片 export default { components: { Editor }, props: { value: { type: String, default: '' } }, data() { return { init: { language_url: '/tinymce/langs/zh_CN.js', language: 'zh_CN', // skin_url: '../../../public/tinymce/skins/ui/oxide', // 打包部署后404,要用绝对路径引入 skin_url: '/tinymce/skins/ui/oxide', content_css: '/tinymce/skins/content/default/content.css', height: 500, plugins: [ 'lists advlist image imagetools lineheight indent2em letterspacing table wordcount' ], toolbar: 'formatselect fontsizeselect | lineheight indent2em letterspacing | bold italic underline strikethrough forecolor backcolor| alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists advlist image table | removeformat undo redo', fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px', branding: false, menubar: false, statusbar: false, image_title: false, automatic_uploads: true, toolbar_drawer: false, images_upload_handler: this.imgUpload }, editorVal: this.value }; }, watch: { value(newValue) { this.editorVal = newValue; } }, mounted() { tinymce.init({}); }, methods: { imgUpload(blobInfo, success, failure) { const formData = new FormData(); formData.append('file', blobInfo.blob(), blobInfo.filename()); uploadFile(formData).then(res => { if (res && res.code && res.code === 200) { this.$message.success('上传成功'); success(res.data.fileUrl); } else { this.$message.error('上传失败'); failure(); } }); } } }; </script>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通