Vue集成TinyMCE富文本编辑器

Vue
429
0
0
2022-11-14

安装依赖

npm i tinymce @packy-tang/vue-tinymce

全局引入

将 node_modules 下的 tinymce目录复制到 public 中;

在 public 下的 index.html 中引入 tinymce.min.js 文件。

<script src="./tinymce/tinymce.min.js"></script>

在 main.js 全局注册组件

import VueTinymce from '@packy-tang/vue-tinymce'

Vue.use(VueTinymce)

自定义富文本编辑器组件

<template> 
  <div> 
    <vue-tinymce 
      ref="tiny" 
      :content="content"
      @change="getContent" 
      :setting="setting" 
      :setup="setup"
    ></vue-tinymce> 
    <material ref="files" @select="setSelectFiles" /> 
  </div>
</template>
<script>
import material from '@/views/Material' //素材库
export default {
  props: ['content'], // 父件传来回显富文本数据 
  components: {
    material
  },
  data () {
    return {
      setting: {
        max_height: 500,
        height: 500,
        statusbar: false, // 隐藏最下方的技术支持栏 
        language_url: '/tinymce/langs/zh_CN.js', // 中文语言包 
        language: 'zh_CN',
        fontsize_formats: '12px 14px 16px 18px 20px 24px 36px 48px',
        plugins: '', // 其他插件需要在这里注册才能在toolbar中使用 
        toolbar: 'material'
      }
    }
  },
  methods: {
    setup (editor) {
      // 富文本自定义按钮 material 
      const _this = this
      editor.ui.registry.addButton('material', {
        // text: '素材库', 
        icon: 'material',
        tooltip: '素材库',
        onAction: function () {
          // 自定义按钮回调
          _this.$refs.files.theMaterial()
        }
      })
      // 自定义按钮图标
      editor.ui.registry.addIcon(
        'material',
        '<svg></svg>' //svg图标
      )
    },
    getContent (text) {
      // 给父组件传回富文本的内容 
      this.$emit('text', text)
    },
    setSelectFiles (files) {
      // 选中的文件回调 
      // 这里是我自己的素材库回调,如果需要自定义插入内容的可以调用 
      // this.$refs.tiny.editor.insertContent() 
      // insertContent() 方法是富文本编辑器内置的API,具体有哪些API可以查找下方的官方文档 
      const str = '<img style="max-width:100%;" src="" />' 
      this.$refs.tiny.editor.insertContent(str)
    }
  }
}
</script>
使用3中的组件,建议全局祖册该组件
vue-tinymce参考
TinyMCE中文文档