基于tinymce-vue封裝富文本編輯器

前言:此文是基于TinyMCE v5版本,想深入學(xué)習(xí)的同學(xué)可以先看下官方介紹 tinymce-vue。

安裝項目依賴

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

安裝完成之后,在 node_modules 中找到 tinymce/skins 目錄。

tinyMCE.png

在 static 目錄下新建 tinymce 文件夾,然后將 skins 目錄拷貝到 tinymce 目錄下,
tinymce 默認(rèn)是英文界面,所以還需要下載一個漢化包 zh_CN.js,拷貝到 tinymce 目錄下。

skins.png
初始化
  • 引用文件
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver/theme'
  • 注冊Editor組件
<editor id='tinymce' v-model='editorData.detail' :init='init'></editor>
  • init數(shù)據(jù),pluginstoolbar可根據(jù)需求自行引入
init: {
        height: 500,
        plugins: '',
        toolbar: '',
        language_url: '/static/tinymce/zh_CN.js',
        language: 'zh_CN',
        skin_url: '/static/tinymce/skins/ui/oxide'
      }
  • mounted調(diào)用方法
tinymce.init({})

如果出現(xiàn)此類報錯請檢查init參數(shù)中的幾個路徑是否正確

errorMessage.png

完整代碼
<template>
  <div class='tinymce'>
    <editor id='tinymce' v-model='editorData.detail' :init='init'></editor>
  </div>
</template>

<script>
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver/theme'
import 'tinymce/plugins/link'
import 'tinymce/plugins/lists'
import 'tinymce/plugins/image'
import 'tinymce/plugins/code'
import 'tinymce/plugins/table'
import 'tinymce/plugins/wordcount'
import 'tinymce/plugins/preview'
import 'tinymce/plugins/media'
import 'tinymce/plugins/charmap'
import 'tinymce/plugins/print'
import 'tinymce/plugins/anchor'
import 'tinymce/plugins/searchreplace'
import 'tinymce/plugins/visualblocks'
import 'tinymce/plugins/fullscreen'
import 'tinymce/plugins/insertdatetime'
import 'tinymce/plugins/paste'
import 'tinymce/plugins/help'

export default {
  name: 'tinymce',
  props: [
    'editorData'
  ],
  components: {
    Editor
  },
  data () {
    return {
      init: {
        height: 500,
        plugins: 'link lists image code table wordcount preview media  charmap print anchor searchreplace visualblocks fullscreen insertdatetime help',
        toolbar: 'bold italic underline strikethrough | fontselect | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat',
        language_url: '/static/tinymce/zh_CN.js',
        language: 'zh_CN',
        skin_url: '/static/tinymce/skins/ui/oxide'
      }
    }
  },
  mounted () {
    tinymce.init({})
  }
}
</script>
editor.png

去除右下角水印的方法:

<style>
  .tox-statusbar__branding {
    display: none;
  }
</style>

到這里富文本編輯器功能已經(jīng)完成了但還沒有結(jié)束,但細(xì)心的同學(xué)會發(fā)現(xiàn)上面代碼props 屬性中的editorData,這不是父傳子的屬性嗎,不錯,這個組件其實(shí)只是我們封裝的一個公共子組件,我們還需要在父組件中調(diào)用。

父組件使用富文本組件
  • 引用子組件
import editorDetail from './editorDetail'
  • 注冊子組件并傳值
<editor-detail :editorData="editorData"/>

components: {
    editorDetail
  }

data () {
    return {
      editorData: {
        detail: ''
      }
    }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容