vue3+TinyMCE6

一、npm下载

npm install tinymce --save
npm install @tinymce/tinymce-vue --save

二、下载中文语言包
中文语言包

三、赋值node_modules下tinymce文件夹下的skins,在public中创建tinymce文件夹并粘贴,同时把下载的语言包也复制进去
在这里插入图片描述
四、组件完整示例

<template>
  <div class="tinymce-box">
    <editor v-model="textContent" :init="init" :disabled="disabled" @onClick="onClick"></editor>
  </div>
</template>

<script>
import tinymce from 'tinymce/tinymce' //tinymce默认hidden,不引入不显示
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver/theme' // 主题文件
import 'tinymce/icons/default'
// import 'tinymce/models/dom'
// tinymce插件可按自己的需要进行导入
// 更多插件参考:https://www.tiny.cloud/docs/plugins/
import 'tinymce/plugins/image' // 插入上传图片插件
import "tinymce/plugins/importcss"; //图片工具
import 'tinymce/plugins/media' // 插入视频插件
import 'tinymce/plugins/table' // 插入表格插件
import 'tinymce/plugins/lists' // 列表插件
import "tinymce/plugins/charmap"; // 特殊字符
import 'tinymce/plugins/wordcount' // 字数统计插件
import "tinymce/plugins/codesample"; // 插入代码
import "tinymce/plugins/code"; // 查看源码
import "tinymce/plugins/fullscreen"; //全屏
import 'tinymce/plugins/link' //
import 'tinymce/plugins/preview' // 预览
import "tinymce/plugins/template"; //插入模板
import 'tinymce/plugins/save' // 保存
import "tinymce/plugins/searchreplace"; //查询替换
import "tinymce/plugins/pagebreak"; //分页
import "tinymce/plugins/insertdatetime"; //时间插入
export default {
  name: "Tinymce",
  components: {Editor},
  props: {
    value: {
      type: String,
      default: ''
    },
    disabled: {
      type: Boolean,
      default: false
    },
    plugins: {
      type: [String, Array],
      default: 'lists image media table wordcount save preview'
      // 插件需要import进来
      // default: 'wordcount visualchars visualblocks toc textpattern template tabfocus spellchecker searchreplace save quickbars print preview paste pagebreak noneditable nonbreaking media insertdatetime importcss imagetools image hr help fullscreen fullpage directionality codesample code charmap link code table lists advlist anchor autolink autoresize autosave'
    },
    toolbar: {
      type: [String, Array],
      // default: 'undo redo |  formatselect | bold italic underline strikethrough forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent blockquote | lists image media table | codesample code removeformat save preview'
      default: 'formats undo redo paste print fontsizeselect fontselect template fullpage|wordcount ltr rtl visualchars visualblocks toc spellchecker searchreplace|save preview pagebreak nonbreaking|media image|outdent indent aligncenter alignleft alignright alignjustify lineheight  underline quicklink h2 h3 blockquote numlist bullist table removeformat forecolor backcolor bold italic  strikethrough hr charmap link insertdatetime|subscript superscript cut codesample code |anchor preview fullscreen|help'
    }
  },
  data() {
    return {
      init: {
        // width: 720,
        height: 300,
        language_url: '/tinymce/langs/zh-Hans.js',
        language: 'zh-Hans',
        // 皮肤:这里引入的是public下的资源文件
        skin_url: '/tinymce/skins/ui/oxide',
        
        // skin_url: 'tinymce/skins/ui/oxide-dark',//黑色系
        plugins: this.plugins,
        toolbar: this.toolbar,
        content_css: '/tinymce/skins/content/default/content.css',
        branding: false,
        // 隐藏菜单栏
        menubar: false,
        // 是否显示底部状态栏
        statusbar: true,
        // convert_urls: false,
        // 初始化完成
        init_instance_callback: (editor) => {
          console.log("初始化完成:",editor)
        },
        // 此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
        // 如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
        images_upload_handler: (blobInfo, success, failure) => {
          const img = 'data:image/jpeg;base64,' + blobInfo.base64()
          console.log("图片上传处理:",img)
          success(img)
        }
      },
      textContent: this.value
    }
  },
  watch: {
    value (newValue) {
      this.textContent = newValue
    },
    textContent (newValue) {
      // 自定义事件给父组件传递数据
      this.$emit('input', newValue)
    }
  },
  // 实例创建完成
  created() {
  },
  // 组件挂载完毕
  mounted() {
    // 初始化 tinymce
    tinymce.init({})
  },
  methods: {
    // 添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events
    // 需要什么事件可以自己增加
    onClick (e) {
      // 自定义事件给父组件传递数据
      this.$emit('onClick', e, tinymce)
    },
    // 可以添加一些自己的自定义事件,如清空内容
    clear () {
      this.textContent = ''
    }
  },

}
</script>

<style scoped>
.tinymce-box{
  margin: 20px;
}
</style>

五、使用封装好的tinymce公共组件

<template>
  <div class="home">
    <tinymce ref="editor" v-model="msg" :disabled="disabled" @onClick="onClick"></tinymce>
    <!--<el-button @click="clear">清空表格</el-button>-->
    <!--<el-button @click="disabled = true">禁用</el-button>-->
  </div>
</template>

<script>

import Tinymce from "./test2.vue";
export default {
  name: "RichText",
  components: { Tinymce },
  data() {
    return {
      msg: 'Welcome to Use Tinymce Editor',
      disabled: false
    }
  },
  // 实例创建完成
  created() {
  },
  // 组件挂载完毕
  mounted() {
  },
  methods: {
    // 鼠标单击的事件
    onClick (e, editor) {
      console.log('Element clicked')
      console.log(e)
      console.log(editor)
    },
    // 清空内容
    clear () {
      this.$refs.editor.clear()
    }

  }

}
</script>

<style scoped>

</style>
Vue3中使用Tinymce实现单图上传的方法如下: 首先,你需要在Vue组件中引入Tinymce编辑器,并在data中定义一个变量来存储上传后的图片地址。 ```javascript <template> <div> <tinymce v-model="content" :init="tinymceConfig"></tinymce> </div> </template> <script> import { ref } from 'vue'; import tinymce from 'tinymce/tinymce'; import 'tinymce/icons/default'; import 'tinymce/themes/silver'; import 'tinymce/plugins/image'; import 'tinymce/plugins/link'; export default { components: { tinymce, }, data() { return { content: '', tinymceConfig: { plugins: 'image link', toolbar: 'image link', images_upload_handler: (blobInfo, success, failure) => { // 在这里进行图片上传的逻辑处理 // 你可以使用阿里云oss或其他方式进行图片上传 // 上传成功后,将图片地址返回给success函数 // 上传失败时,调用failure函数并传递错误信息 }, }, }; }, }; </script> ``` 在`images_upload_handler`函数中,你可以根据你的需求选择合适的图片上传方式。你可以使用阿里云oss或其他方式进行图片上传。在上传成功后,将图片地址返回给`success`函数;在上传失败时,调用`failure`函数并传递错误信息。 请注意,上述代码中的图片上传逻辑只是一个示例,你需要根据你的具体情况进行相应的修改。 引用: \[1\] 多图上传相关代码 \[2\] 图片上传的API地址 \[3\] 图片保存的逻辑代码 #### 引用[.reference_title] - *1* *2* [vite+vue3+tinymce实现单图上传和多图上传到阿里云oss](https://blog.csdn.net/deng_zhihao692817/article/details/125061332)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [2.0 vue2+tinymce+springboot实现图片上传与回显](https://blog.csdn.net/u013733643/article/details/130868762)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值