Vue集成TinyMCE富文本编辑器

安装依赖

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中文文档

本作品采用《CC 协议》,转载必须注明作者和本文链接
八度余溫
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!