项目场景:
vue项目使用tinymce的真实记录# 使用tinymce需要几步
问题描述:
明明没写错就是不会知道为什么报错
原因分析:
因为vue-cli 版本与tinymce版本不匹配找不到问题所在
解决方案:
第一步:
指定 tinymce 版本
npm install @tinymce/tinymce-vue@3.2.2 tinymce@5.3.1 -S
第二步:
找到node_modules中的skins文件夹,然后在项目中的public下新建tinymce文件夹,然后将刚刚找到的整个skins文件夹拷贝到public的tinymce目录下。
新建一个语言包的文件langs,因为tinymce是英文的,需要下一个中文的包,(你是不是想问 包在哪里 直接给我多 多省事,是想白漂吗?联系我)
第三步*
在components文件夹下新建tinymce组件的文件夹,新建index.vue文件,复制以下代码进去:
index.vue中的代码片段
<template>
<div>
<editor id="tinymce" v-model="myValue"
:init="init" :disabled="disabled"
@onClick="onClick"></editor>
</div>
</template>
<script>
//引入基础文件:
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver'
// 编辑器插件plugins
// 更多插件参考:https://www.tiny.cloud/docs/plugins/
import 'tinymce/plugins/image' // 插入上传图片插件
import 'tinymce/plugins/link' // 插入链接
import 'tinymce/plugins/code' // 插入代码
import 'tinymce/plugins/preview' // 插入预览
import 'tinymce/icons/default/icons'
import 'tinymce/plugins/media' // 插入视频插件
import 'tinymce/plugins/table' // 插入表格插件
import 'tinymce/plugins/lists' // 列表插件
import 'tinymce/plugins/contextmenu'
import 'tinymce/plugins/wordcount' // 字数统计插件
import 'tinymce/plugins/paste' // 粘贴
import 'tinymce/plugins/autolink' // 链接
import 'tinymce/plugins/insertdatetime' // 链接
import 'tinymce/plugins/hr' // 分割线
import 'tinymce/plugins/colorpicker'
import 'tinymce/plugins/textcolor'
import axios from 'axios'
import {
upload
} from '@/api/image.js'
export default {
name: "tinymce",
components: {
Editor
},
props: {
value: {
type: String,
default: ''
},
disabled: {
type: Boolean,
default: false
},
},
data() {
return {
myValue: this.value,
init: {
selector: '.tinymce',
language_url: '/tinymce/langs/zh_CN.js', // 语言包的路径
language: 'zh_CN', //语言
skin_url: '/tinymce/skins/ui/oxide', // skin路径
height: 500, //编辑器高度
branding: false, //是否禁用“Powered by TinyMCE”
menubar: false, //顶部菜单栏显示
elementpath: false, //禁用编辑器底部的状态栏
paste_data_images: true, // 允许粘贴图像
image_advtab: true,
convert_urls: false,
plugins: ['image', 'link', 'code', 'preview', 'media', 'table', 'paste', 'wordcount', 'lists', ], //插件
toolbar: [
'bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat'
],
images_upload_handler: (blobInfo, success, failure) => {
this.handleImageAdded(blobInfo, success, failure)
}
},
}
},
mounted() {
tinymce.init({})
},
// activated() {
// tinymce.init({})
// },
watch: {
//动态传参
value(newValue) {
this.myValue = newValue
},
//读取输入框内的数据
myValue(newValue) {
this.$emit('input', newValue)
}
},
methods: {
//需要什么事件可以自己增加
onClick(e) {
this.$emit('onClick', e, tinymce)
},
//可以添加一些自己的自定义事件,如清空内容
clear() {
this.myValue = ''
},
handleImageAdded(blobInfo, success, failure) {
let file = blobInfo.blob() //数据流
let formdata = new FormData()
formdata.set('file', file)
upload(formdata, {
'Content-Type': 'multipart/form-data'
}).then(res => {
if (res.code === '200') {
success(res.data[0].url)
} else {
failure(res.data)
this.$message.error(res.data)
}
}).catch(err => {
failure(err)
})
},
}
}
</script>
如需上传图片tinymce配置了可以上传的images_upload_handler函数
然后调用methods中的方法handleImageAdded,然后配置上传的upload
我这里自己封住了上传的方法upload,这个自行配置
页面引入与注册
import TinymceEditor from '@/components/tinymce/index'
components: {
// quillEditor,
TinymceEditor
},
template 中使用完美
<tinymce-editor ref="editor" v-model="content" @input="newContent" />