当前位置:   article > 正文

Vue项目引入富文本编辑器:TinyMCE_vue 富文本

vue 富文本

一、 什么是TinyMCE

TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有:UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。

TinyMCE的优势:

开源可商用,基于LGPL2.1
插件丰富,自带插件基本涵盖日常所需功能(示例看下面的Demo-2)
接口丰富,可扩展性强,有能力可以无限拓展功能
界面好看,符合现代审美
提供经典、内联、沉浸无干扰三种模式(详见“介绍与入门”)
对标准支持优秀(自v5开始)
多语言支持,官网可下载几十种语言。

拓展:
除了TinyMCE,还有一款适用于Vue的富文本编辑器:Vue-Quill-Editor,使用方法请参考文档。

二、如何使用TinyMCE

1. 安装TinyMCE

若项目是vue3.x,则:

npm install tinymce -S

如项目是vue2.x,则:

npm install tinymce@5.1.0 -S

2. 安装tinymce-vue

若项目是vue3.x,则:

npm install @tinymce/tinymce-vue -S

若项目是vue2.x,则:

npm install @tinymce/tinymce-vue@3.0.1 -S

3. 下载中文语言包

tinymce提供了很多的语言包,这里我们下载中文语言包
地址:https://www.tiny.cloud/get-tiny/language-packages/

image

4. Vue项目集成TinyMCE

1)封装成组件

  1. <template>
  2. <div class="tinymce-box">
  3. <editor v-model="myValue"
  4. :init="init"
  5. :disabled="disabled"
  6. @onClick="onClick">
  7. </editor>
  8. </div>
  9. </template>
  10. <script>
  11. import tinymce from 'tinymce/tinymce' //tinymce默认hidden,不引入不显示
  12. import Editor from '@tinymce/tinymce-vue'
  13. import 'tinymce/themes/silver'
  14. // 编辑器插件plugins
  15. // 更多插件参考:https://www.tiny.cloud/docs/plugins/
  16. import 'tinymce/plugins/image'// 插入上传图片插件
  17. import 'tinymce/plugins/media'// 插入视频插件
  18. import 'tinymce/plugins/table'// 插入表格插件
  19. import 'tinymce/plugins/lists'// 列表插件
  20. import 'tinymce/plugins/wordcount'// 字数统计插件
  21. export default {
  22. components:{
  23. Editor
  24. },
  25. name:'tinymce',
  26. props: {
  27. value: {
  28. type: String,
  29. default: ''
  30. },
  31. disabled: {
  32. type: Boolean,
  33. default: false
  34. },
  35. plugins: {
  36. type: [String, Array],
  37. default: 'lists image media table wordcount'
  38. },
  39. toolbar: {
  40. type: [String, Array],
  41. default: 'undo redo | formatselect | bold italic forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat'
  42. }
  43. },
  44. data(){
  45. return{
  46. init: {
  47. language_url: '/tinymce/langs/zh_CN.js',
  48. language: 'zh_CN',
  49. skin_url: '/tinymce/skins/ui/oxide',
  50. // skin_url: 'tinymce/skins/ui/oxide-dark',//暗色系
  51. height: 300,
  52. plugins: this.plugins,
  53. toolbar: this.toolbar,
  54. branding: false,
  55. menubar: false,
  56. // 此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
  57. // 如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
  58. images_upload_handler: (blobInfo, success, failure) => {
  59. const img = 'data:image/jpeg;base64,' + blobInfo.base64()
  60. success(img)
  61. }
  62. },
  63. myValue: this.value
  64. }
  65. },
  66. mounted () {
  67. tinymce.init({})
  68. },
  69. methods: {
  70. // 添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events
  71. // 需要什么事件可以自己增加
  72. onClick (e) {
  73. this.$emit('onClick', e, tinymce)
  74. },
  75. // 可以添加一些自己的自定义事件,如清空内容
  76. clear () {
  77. this.myValue = ''
  78. }
  79. },
  80. watch: {
  81. value (newValue) {
  82. this.myValue = newValue
  83. },
  84. myValue (newValue) {
  85. this.$emit('input', newValue)
  86. }
  87. }
  88. }
  89. </script>
  90. <style scoped>
  91. </style>

2)组件引用

  1. <template>
  2. <div class="home">
  3. <tinymce
  4. ref="editor"
  5. v-model="msg"
  6. :disabled="disabled"
  7. @onClick="onClick"
  8. />
  9. <button @click="clear">清空内容</button>
  10. <button @click="disabled = true">禁用</button>
  11. </div>
  12. </template>
  13. <script>
  14. import tinymce from '@/components/tinymce.vue'
  15. export default {
  16. name: 'home',
  17. components: {
  18. tinymce
  19. },
  20. data(){
  21. return{
  22. msg: 'Welcome to Use Tinymce Editor',
  23. disabled: false
  24. }
  25. },
  26. methods: {
  27. // 鼠标单击的事件
  28. onClick (e, editor) {
  29. console.log('Element clicked')
  30. console.log(e)
  31. console.log(editor)
  32. },
  33. // 清空内容
  34. clear () {
  35. this.$refs.editor.clear()
  36. }
  37. }
  38. }
  39. </script>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/733888
推荐阅读
相关标签
  

闽ICP备14008679号