最近工作项目需要基于tinymce-vue进行插件开发,需要自己写一个插入图片/视频/链接的插件,虽然说tinymce自带就有这些插件,但是这些插件的UI界面长得不是很美观,所以大佬说要自定义tinymce的这些插件。现在就基于tinymce-vue自定义图片上传的插件,来记录一下吧。
先讲一个这个关于图片上传的需求:
- 在点击菜单栏的插入图片,要弹出一个我们自定义的vue组件
- 点击图片上传后要将图片插入到编辑框里与封面图中
- 插入的图片,不管是在编辑框里还是在封面图里,图片的右下角要带着一个裁剪的按钮,让用户可以对图片进行裁剪
以下是我自己画的一张图
这里就简单地记录一下吧,然后写一个超简的demo,demo仅记录自定义图片上传插件,且在插件中调用vue组件,并将上传的图片插入到编辑框,就是一个超简单的模板。其他的像上传后再把图片插入后封面图跟图片编辑按钮就不做记录,需要自己拓展
如何引入tinymce-vue插件与汉化插件就不讲了。(demo地址
)
先在node_modules的tinymce文件夹下的plugins,下创建自定义的插件文件夹例如uploadImg,然后在该文件夹下创建index.js、plugin.js(最好将plugins文件夹移到node_modules外的其他目录,不然每次npm install 插件就都没了,每次都要给插件作备份)
import 'tinymce/plugins/uploadImg'; //这里需要将插件引入
// 然后再init中使用该插件
plugins: ' uploadImg', // 插件
toolbar: 'undo redo | uploadImg ', // 顶部排版
自定义插件(就是上面创建的plugin.js)
一开始是想怎么在外部给这个插件传参,但是发现好像不太可行,然后就改成直接在插件里创建组件了。
在插件中调用一个vue的插件,是通过Vue的render函数来做渲染的,一开始是用extend来创建组件,但是效果不好就给换成render了,然后通过组件里抛出的事件来做组件响应,从而来控制我们动态组件。
import Vue from 'vue'
import TinymceUpload from '@/components/Tinymce/TinymceUpload' // 引入自己的自定义插件
(function () {
'use strict';
var global = tinymce.util.Tools.resolve('tinymce.PluginManager');
var register = function