【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)

【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)

  • 一、安装
  • 二、前期准备工作
    • 1、去[官网](https://www.tiny.cloud/get-tiny/language-packages/)下载语言包;
    • 2、将下载的语言包复制到项目中的assets(存放路径您随意)下;
    • 3、到node_modules中找到tinymce对应的文件夹,将其中的skins文件夹复制到static(存放路径您随意)中;
    • 4、如果需要支持粘贴保留原格式,将powerpaste文件夹复制到static(存放路径您随意)中;
  • 三、插件使用&配置说明
    • 1、基本功能(不需要配置toolbar&plugins)
    • 2、扩展插件功能
    • 3、踩坑点
  • 四、效果
    • 1、基础功能(即不需配置toolbar、plugins)
    • 2、进阶效果

一、安装

npm install tinymce
npm install @tinymce/tinymce-vue

二、前期准备工作

1、去官网下载语言包;

【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)_第1张图片

2、将下载的语言包复制到项目中的assets(存放路径您随意)下;

【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)_第2张图片

3、到node_modules中找到tinymce对应的文件夹,将其中的skins文件夹复制到static(存放路径您随意)中;

4、如果需要支持粘贴保留原格式,将powerpaste文件夹复制到static(存放路径您随意)中;

powerpaste文件夹提取链接:https://pan.baidu.com/s/1Y7ziHe0Rgm2n5r1XcVEmNg
提取码: xcbz
【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)_第3张图片

三、插件使用&配置说明

1、基本功能(不需要配置toolbar&plugins)

toolbar 描述
newdocument 创建一个新文档
undo 撤回
redo 恢复
visualaid 网格线
cut 剪切
copy 复制
paste 粘贴
selectall 全选
bold 加粗
italic 斜体
removeformat 清除格式
alignright 右对齐
alignjustify 两边对齐
outdent 减少缩进
indent 增加缩进
forecolor 前景色
backcolor 背景色
fontsizeselect 字号大小
formatselect 标题大小
underline 下划线
strikethrough 删除线
subscript 下标
superscript 上标
superscript 上标
在node_modules/tinymce/plugins目录中查看其他插件

2、扩展插件功能

除了以上的基本功能,TinyMCE编辑器还支持插件扩展,tinymce 通过添加插件plugins的方式来添加功能,在添加之前我们需要先来引入相应的插件,引入插件之后我们就可以在init中重新初始化下对应的toolbar(工具栏图标)和plugins(对应的插件组件)属性

toolbar 插件引入(toolbar) 描述
pastetext import “tinymce/plugins/paste”; 粘贴为纯文本
powerpaste import “tinymce/plugins/powerpaste”; 复制粘贴保留原格式
preview import “tinymce/plugins/preview”; 预览
code import “tinymce/plugins/code”; 编辑源码
image import “tinymce/plugins/image”; 插入图片
image import “tinymce/plugins/imagetools”; 编辑图片
- import “tinymce/plugins/media”; 插入视频
link import “tinymce/plugins/link”; 超链接
preview import “tinymce/plugins/preview”; 预览
code import “tinymce/plugins/template”; 模板
inserttable import “tinymce/plugins/table”; 插入表格
tableprops import “tinymce/plugins/table”; 配置并插入表格
deletetable import “tinymce/plugins/table”; 删除表格
cell import “tinymce/plugins/table”; 表格单元配置
row import “tinymce/plugins/table”; 表格行配置
column import “tinymce/plugins/table”; 表格列配置
- import “tinymce/plugins/advlist”; 高级列表
bullist import “tinymce/plugins/lists”; 项目符号
numlist import “tinymce/plugins/lists”; 编号列表
- 在node_modules/tinymce/plugins目录中查看其他插件
<template>
  <div>
    <editor :id="tinymceId" :init="init">
  </div>
</template>
<script>
// 导入富文本
import tinymce from "tinymce/tinymce";
import Editor from "@tinymce/tinymce-vue";
import "tinymce/icons/default"; //富文本样式
// 配置富文本
import "tinymce/plugins/table";
import "tinymce/plugins/image";
import "tinymce/plugins/imagetools";
import "tinymce/plugins/autoresize";
import "tinymce/plugins/advlist"; //高级列表
import "tinymce/plugins/paste"; //可复制
import "tinymce/plugins/link";
import "tinymce/themes/silver/theme.min.js"; //引入富文本的主要脚本
import "tinymce/skins/ui/oxide/skin.min.css"; //富文本样式
const toolbar =
  "  undo redo restoredraft | fontselect fontsizeselect styleselect forecolor backcolor bold italic underline strikethrough  anchor link | alignleft aligncenter alignright alignjustify outdent indent lineheight| \
table tablemergecells  image  charmap emoticons hr pagebreak |bullist numlist | blockquote subscript superscript removeformat | \
insertdatetime print preview | fullscreen | bdmap indent2em  formatpainter axupimgs";
const plugins =
  "powerpaste autoresize print paste preview searchreplace autolink directionality visualblocks visualchars fullscreen image imagetools template  codesample table  charmap hr pagebreak nonbreaking anchor link insertdatetime advlist lists wordcount  textpattern help emoticons autosave ";
const fonts = [
  "宋体=宋体",
  "微软雅黑=微软雅黑",
  "新宋体=新宋体",
  "黑体=黑体",
  "楷体=楷体",
  "隶书=隶书",
  "Courier New=courier new,courier",
  "AkrutiKndPadmini=Akpdmi-n",
  "Andale Mono=andale mono,times",
  "Arial=arial,helvetica,sans-serif",
  "Arial Black=arial black,avant garde",
  "Book Antiqua=book antiqua,palatino",
  "Comic Sans MS=comic sans ms,sans-serif",
  "Courier New=courier new,courier",
  "Georgia=georgia,palatino",
  "Helvetica=helvetica",
  "Impact=impact,chicago",
  "Symbol=symbol",
  "Tahoma=tahoma,arial,helvetica,sans-serif",
  "Terminal=terminal,monaco",
  "Times New Roman=times new roman,times",
  "Trebuchet MS=trebuchet ms,geneva",
  "Verdana=verdana,geneva",
  "Webdings=webdings",
  "Wingdings=wingdings,zapf dingbats",
];
export default {
  components: { Editor },
  data() {
    return {
      tinymceId:
        "vue-tinymce-" + +new Date() + ((Math.random() * 1000).toFixed(0) + ""), //富文本编辑器的id,
      init: {
        language_url: require("@/assets/langs/zh_CN.js"), // 语言包的路径,具体路径看自己的项目(前期工作请下载好语言包)
        language: "zh_CN",
        fontsize_formats:
          "12px 14px 16px 18px 20px 22px 24px 28px 32px 36px 48px 56px 72px", //字体大小
        font_formats: fonts.join(";"),//字体
        setup: function (editor) {
          //设置默认字体样式
          editor.on("init", function (e) {
            this.getBody().style.fontFamily = "宋体";
          });
        },
        min_height: 300,//编辑器最小高度
        statusbar: false, // 隐藏编辑器底部的状态栏
        paste_data_images: true, // 允许粘贴图像
        //主题样式路径
        skin_url:
         (process.env.API_ROOT == "//xx.woa.com/wxgame"
            ? "//xx.woa.com/wxgame"
            : process.env.API_ROOT == "//xx.woa.com/wxgame-test"
            ?"//xx.woa.com/wxgame-test"
            : "") + "/static/skins/ui/oxide",// 必选 skin路径,具体路径看自己的项目
          //为编辑区指定css文件
          //  content_css:"./static/css/content.css",//一般我们这里都是直接获取路径是没有问题的,但是有坑点,往下看会有解释原因,skin_url,powerpaste同理
          //正确写法,根据自己的环境判断拼接根路径
          // (process.env.API_ROOT == 测试环境路径
          //  ? 测试环境路径
          // : process.env.API_ROOT == 现网环境路径
          //  ? 现网环境路径
          // : "") 
        content_css:
          (process.env.API_ROOT == "//xx.woa.com/wxgame"
            ? "//xx.woa.com/wxgame"
            : process.env.API_ROOT == "//xx.woa.com/wxgame-test"
            ?"//xx.woa.com/wxgame-test"
            : "") + "/static/css/content.css",
        // 添加复制可保留原格式扩展插件开始
        external_plugins: {
        //powerpaste 路径
          powerpaste:
            (process.env.API_ROOT == "//xx.woa.com/wxgame"
            ? "//xx.woa.com/wxgame"
            : process.env.API_ROOT == "//xx.woa.com/wxgame-test"
            ?"//xx.woa.com/wxgame-test"
            : "") + "/static/powerpaste/plugin.min.js",
        },
        powerpaste_word_import: "propmt", // 参数可以是propmt, merge, clear,效果自行切换对比
        powerpaste_html_import: "propmt", // propmt, merge, clear
        powerpaste_allow_local_images: true,
        // 添加复制可保留原格式扩展插件结束
        image_dimensions: true, // 保存图片的时候可以设置大小
        //表格默认样式
        table_default_styles: {
          "line-height": "47px",
          "border-collapse": "collapse",
          width: "100%",
          "border-color": "#EBEEF5",
          "box-sizing": " border-box",
        },
        plugins: plugins,
        toolbar: toolbar,
      },
    };
  },
  mounted() {
    tinymce.init({});
  },
};
</script>

3、踩坑点

  • 踩坑点:开发环境测试无问题,等项目打包上线后,发现skin_url、content_css和powerpasteurl不生效;
  • 原因:打包后路径不对,自己根据自己的项目环境进行拼接url路径;

四、效果

1、基础功能(即不需配置toolbar、plugins)

【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)_第4张图片

2、进阶效果

【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)_第5张图片
最后,如果帮到您
【Vue】vue项目中使用tinymce富文本组件(@tinymce/tinymce-vue)_第6张图片

你可能感兴趣的:(VUE,笔记,前端,笔记,vue.js,前端,javascript)