安装依赖
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中文文档