Vue 项目中引入 tinymce 富文本编辑器

官网文档链接: tinymce

中文文档链接:TinyMCE中文文档中文手册

这里采用vue2的版本

1.安装

npm install --save tinymce "@tinymce/tinymce-vue@^3"

2.准备工作

  • 安装之后,在 node_modules 中找到 tinymce/skins 目录,然后将 skins 目录拷贝到 public 目录下(可以新建一个文件夹名为tinymce)
  • 上官网下载中文包,选择zh-CN(这里新版下下来的是zh-Hans.js),同样放进上面创建好的tinymce文件夹中

3.使用

这里我单独封装成了一个组件,创建个名为TinyEditor.vue的组件

  • 引入以下文件
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver/theme'
  • 注册组件
export default {
  name: 'TinyEditor',
  components: {
    Editor
  },
...
  • 页面使用
<template>
  <editor  id="tinymce" v-model="content" :init="init" />
</template>
  • init配置项
data() {
    return {
      init: {
        language_url: '/tinymce/zh-Hans.js', // 语言包位置,因为放在public下所以可以省略public
        selector: '#tinymce', // tinymce的id
        language: 'zh-Hans', // 语言类型
        skin_url: '/tinymce/skins/ui/oxide',
        height: 700, // 编辑器高度
        browser_spellcheck: true, // 拼写检查
        // elementpath: false, //禁用编辑器底部的状态栏
        // statusbar: false, // 隐藏编辑器底部的状态栏
        paste_data_images: true, // 允许粘贴图像
        // menubar: false, //最顶部文字信息
        branding: false, // 是否禁用“Powered by TinyMCE”,
        fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px',
        font_formats: '微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;'
      }
    }
  },
  • 初始化
mounted() {
    tinymce.init({})
  }

4.打开页面

刷新一看,报错😒
tinymce Unexpected token ‘<’ (at icon.js:1:1)
tinymce Unexpected token ‘<’ (at model.js:1:1)

  • 解决
    再引入以下文件
import 'tinymce/icons/default/icons'
import 'tinymce/models/dom/model'

5.插件扩展

按自己需求引入以下文件

import 'tinymce/plugins/image'
import 'tinymce/plugins/link'
import 'tinymce/plugins/code'
import 'tinymce/plugins/table'
import 'tinymce/plugins/lists'
import 'tinymce/plugins/wordcount'

然后在init的配置中加入和配置就可以了

init: {
        ...
        plugins: 'image link code table lists wordcount', 
        toolbar: 'fontselect fontsizeselect link lineheight forecolor backcolor bold italic underline strikethrough | alignleft aligncenter alignright alignjustify | image quicklink h2 h3 blockquote table numlist bullist preview fullscreen', // 工具栏
        ...

ps: 后面换了tinymce5.x的版本,因为6.0很多插件都变成付费了

以下是使用5.x完整的代码

<template>
  <editor v-if="postForm" id="tinymce" v-model="postForm.content" :init="init" />
</template>

<script>
import tinymce from 'tinymce/tinymce'
import Editor from '@tinymce/tinymce-vue'
import 'tinymce/themes/silver/theme'
import 'tinymce/skins/content/default/content.css'
import 'tinymce/icons/default/icons'
import 'tinymce/plugins/image' // 插入图片
import 'tinymce/plugins/imagetools' // 图片编辑
import 'tinymce/plugins/link' // 超链接
import 'tinymce/plugins/code' // 打开代码对话框,会显示元素标签
import 'tinymce/plugins/table' // 表格
import 'tinymce/plugins/lists' // 添加编号和项目符号列表
import 'tinymce/plugins/advlist' // 高级列表(例如字母编号列表、方形项目符号)
import 'tinymce/plugins/wordcount' // 字数统计
import 'tinymce/plugins/media' // 插入视频链接
import 'tinymce/plugins/emoticons/js/emojis' // emoji
// import 'tinymce/plugins/toc' // 目录插件,点击后会在光标位置生成目录
import 'tinymce/plugins/help' // 帮助
import 'tinymce/plugins/preview' // 预览
import 'tinymce/plugins/codesample' // 代码块
import 'tinymce/plugins/paste' // 粘贴(带样式)
import 'tinymce/plugins/fullscreen' // 全屏
// import 'tinymce/plugins/textpattern' // 类似于识别markdown语法
import 'tinymce/plugins/searchreplace' // 查找和替换
import 'tinymce/plugins/autolink' // 键入有效、完整的URL时,会自动创建超链接
import 'tinymce/plugins/directionality' // 方向性插件
import 'tinymce/plugins/visualblocks' // 展示视觉块
// import 'tinymce/plugins/visualchars' // 查看不可见字符
// import 'tinymce/plugins/template' // 自定义模板
import 'tinymce/plugins/template' // 自定义模板
// import 'tinymce/plugins/quickbars' // 快速工具条
import 'tinymce/plugins/nonbreaking'
import 'tinymce/plugins/insertdatetime' // 插入时间
import 'tinymce/plugins/print' // 打印
import 'tinymce/plugins/autosave' // 恢复到最新的自动保存的草稿
import 'tinymce/plugins/anchor' // 创建/编辑锚元素
export default {
  name: 'TinyEditor',
  components: {
    Editor
  },
  props: {
    postForm: {
      type: Object,
      default: () => {}
    }
  },
  data() {
    return {
      init: {
        placeholder: '在这里输入文字',
        language_url: '/tinymce/zh-Hans.js', // 语言包位置,因为放在public下所以可以省略public
        selector: '#tinymce', // tinymce的id
        language: 'zh-Hans', // 语言类型
        skin_url: '/tinymce/skins/ui/oxide',
        height: 700, // 编辑器高度
        browser_spellcheck: true, // 拼写检查
        // elementpath: false, //禁用编辑器底部的状态栏
        // statusbar: false, // 隐藏编辑器底部的状态栏
        paste_data_images: true, // 允许粘贴图像
        // menubar: false, // 最顶部菜单栏
        plugins: 'nonbreaking visualblocks searchreplace insertdatetime print media advlist link autolink charmap autosave codesample directionality emoticons fullscreen help ' +
            'preview anchor image imagetools code table lists wordcount',
        branding: false, // 是否禁用“Powered by TinyMCE”
        toolbar: 'undo redo fontselect fontsizeselect formatselect lineheight forecolor backcolor codesample bold italic underline strikethrough indent outdent ' +
            'alignleft aligncenter alignright alignjustify subscript superscript blockquote image imagetools media table numlist bullist preview ' +
            'fullscreen removeformat restoredraft', // 工具栏
        fontsize_formats: '12px 14px 16px 18px 24px 36px 48px 56px 72px',
        font_formats: '微软雅黑=Microsoft YaHei,Helvetica Neue,PingFang SC,sans-serif;苹果苹方=PingFang SC,Microsoft YaHei,sans-serif;宋体=simsun,serif;仿宋体=FangSong,serif;黑体=SimHei,sans-serif;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;',
        image_advtab: true,
        images_upload_handler: this.articleContentUploadImage,
        codesample_global_prismjs: true,
        codesample_languages: [
          { text: 'Bash', value: 'bash' },
          { text: 'C', value: 'c' },
          { text: 'C++', value: 'cpp' },
          { text: 'CSS', value: 'css' },
          { text: 'Dockerfile', value: 'dockerfile' },
          { text: 'Go', value: 'go' },
          { text: 'HTML', value: 'html' },
          { text: 'Java', value: 'java' },
          { text: 'JavaScript', value: 'javascript' },
          { text: 'JSON', value: 'json' },
          { text: 'Kotlin', value: 'kotlin' },
          { text: 'Markdown', value: 'markdown' },
          { text: 'Nginx', value: 'nginx' },
          { text: 'PHP', value: 'php' },
          { text: 'Python', value: 'python' },
          { text: 'Ruby', value: 'ruby' },
          { text: 'Rust', value: 'rust' },
          { text: 'SQL', value: 'sql' },
          { text: 'TypeScript', value: 'typescript' },
          { text: 'YAML', value: 'yaml' }
        ]
      }
    }
  },
  mounted() {
    tinymce.init({})
  },
  methods: {
    articleContentUploadImage(blobInfo, success, failure, progress) {
      console.log(blobInfo, success, failure, progress)
    }
  }
}
</script>

<style scoped>

</style>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
对于 Vue 项目引入 tinymce 富文本编辑器,我们需要先在项目安装 tinymce 的依赖包,可以通过 npm 指令进行安装。安装成功后,我们需要在组件引入并初始化 tinymce 编辑器。 首先,我们需要在组件引入 tinymce,可以通过 `import 'tinymce/tinymce'` 和 `import 'tinymce/themes/silver'` 来引入 tinymce 核心文件和主题文件。然后,我们在组件的 `mounted()` 生命周期函数进行 tinymce 编辑器的初始化。如下所示: ``` <template> <div> <textarea id="editor"></textarea> </div> </template> <script> import 'tinymce/tinymce' import 'tinymce/themes/silver' export default { mounted() { tinymce.init({ selector: '#editor', height: 500, plugins: [ 'paste', 'table', 'advlist' ], toolbar: 'undo redo | styleselect | bold italic | alignleft aligncenter alignright | bullist numlist outdent indent | table | code | preview' }) } } </script> ``` 在初始化过程,我们需要指定要初始化的 HTML 元素的选择器 `selector`,这里是 `'#editor'`,然后可以进行一系列的配置,包括高度、插件、工具栏等,具体可以参考官方文档。 需要注意的是,在组件销毁时我们需要进行 tinymce 编辑器的销毁,可以在 `beforeDestroy()` 生命周期函数进行编写。如下所示: ``` <script> import 'tinymce/tinymce' import 'tinymce/themes/silver' export default { data() { return { tinymceInstance: null } }, mounted() { this.tinymceInstance = tinymce.init({ selector: '#editor', ... }) }, beforeDestroy() { tinymce.remove(this.tinymceInstance) } } </script> ``` 以上就是 Vue 项目引入 tinymce 富文本编辑器的一个基本流程,可以根据自己的需求进行相应的配置调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值