tinymce在vue中的使用

tinymce在vue中的使用
1.下载插件

npm i @tinymce/tinymce-vue@3.2.8
 npm i tinymce@4.8.4

2.找个目录新建文件夹tinymce,把node_modules/tinymce里的文件复制到新建文件夹里
如图
lang是我下载的语言包,tinymce 默认是英文界面,所以还需要下载一个中文语言包
3.初始化引入

import edit from "@tinymce/tinymce-vue";
import "./tinymce.min.js";
import "./themes/silver/theme.min.js";
import "./langs/zh_CN";
import "./icons/default/icons.min.js";

tinymce-vue 是一个组件,需要在 components 中注册,然后直接使用

<edit :init="init" v-model="data" id="tinymce" ></edit>

init是编辑器的一些初始化配置,我是在return里定义的

init: {
        language: "zh_CN",
        height: 600,
        menubar: "false", //菜单栏
        branding: false, //禁用右下角标识字符串
        paste_retain_style_properties: "all", //粘贴保留所有格式
        paste_data_images: true, // 允许粘贴图像,图片粘贴自动上传需要
        // 图片上传回调函数
        images_upload_handler: this.imagesUploadHandler,
        plugins: this.plugins,
        toolbar: this.toolbar
      }

4.扩展插件
tinymce 通过添加插件 plugins 的方式来添加功能,比如
plugins:"fullscreen"
进行引入import "./plugins/fullscreen/plugin.min.js";
添加了插件之后,工具栏 toolbar 上添加对应的功能按钮,toolbar 也可以自定义,toolbar:"fullscreen"
以下是完整的组件代码:

<template>
    <edit :init="init" v-model="data" id="tinymce" ></edit>
</template>
<script>
import edit from "@tinymce/tinymce-vue";
import "./tinymce.min.js";
import "./themes/silver/theme.min.js";
import "./langs/zh_CN";
import "./icons/default/icons.min.js";

//引入插件
import "./plugins/link/plugin.min.js";
import "./plugins/code/plugin.min.js";
import "./plugins/image/plugin.min.js"; //图片上传需要
import "./plugins/paste/plugin.min.js"; //图片粘贴自动上传需要
import "./plugins/media/plugin.min.js";
import "./plugins/table/plugin.min.js";
import "./plugins/lists/plugin.min.js";
import "./plugins/contextmenu/plugin.min.js";
import "./plugins/wordcount/plugin.min.js";
import "./plugins/textcolor/plugin.min.js";
import "./plugins/fullscreen/plugin.min.js"; //全屏
import "./plugins/searchreplace/plugin.min.js";
import "./plugins/emoticons/plugin.min";

export default {
  name: "EditorTinymce",
  components: {
    edit
  },
  props: {
    value: {
      type: String,
      default: ""
    },
    content: {
      type: String,
      default: ""
    },
   plugins: {
      type: [String, Array],
      default:  'link lists image code table textcolor wordcount contextmenu paste media fullscreen searchreplace '
    },
    toolbar: {
      type: [String, Array],
      default:  'undo redo |fontsizeselect  formatselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | lists image media table | removeformat | paste | code | fullscreen | searchreplace '
    },
  },
  data() {
    return {
      data: this.content, //文本数据
      init: {
        language: "zh_CN",
        height: 600,
        menubar: "false", //菜单栏
        branding: false, //禁用右下角标识字符串
        paste_retain_style_properties: "all", //粘贴保留所有格式
        paste_data_images: true, // 允许粘贴图像,图片粘贴自动上传需要
        // 图片上传回调函数
        images_upload_handler: this.imagesUploadHandler,
        plugins: this.plugins,
        toolbar: this.toolbar
      }
    };
  },

  beforeDestroy() {
    // 销毁tinymce
    this.$emit("on-destroy");
    window.tinymce.remove(document.getElementById("tinymce"));
  },
  methods: {
    setContent(val) {
      this.data = val;
    },
    getContent() {
      return this.data;
    },
    imagesUploadHandler(blobInfo, success, failure, progress) {
      console.log("图片上传");
      var xhr, formData;
      var file = blobInfo.blob(); //转化为易于理解的file对象
      xhr = new XMLHttpRequest();
      xhr.withCredentials = false;

      xhr.open("POST", "your imgUrl");
      xhr.setRequestHeader("Authorization", "token");

      xhr.onload = function() {
        var json = JSON.parse(xhr.responseText);
        console.log(json);

        if (json.code != 200) {
          const img = "data:image/jpeg;base64," + blobInfo.base64();
          success(json.url);
          return;
        }
        success(json.url);
      };

      formData = new FormData();
      formData.append("file", file, file.name);
      xhr.send(formData);
    }
  }
};
</script>
<style scoped>
@import url("skins/ui/oxide/skin.min.css");
</style>

这样一个tinymce编辑器就出来啦
在这里插入图片描述

TinyMCEVue使用可以通过引入相应的组件来实现。有几种不同的组件可以选择使用,比如vue-tinymcetinymce-vue。引用\[1\]提到了使用vue-tinymce的方法,首先需要安装组件,然后在Vue项目引入并使用该组件。具体的安装和使用方法可以参考引用\[1\]的代码示例。引用\[2\]提到了使用tinymce-vue组件的方法,需要在Vue项目的components注册该组件,并在模板直接使用。引用\[3\]提到了另一种初始化TinyMCE的方法,需要将相关文件复制到指定目录,并引入相应的文件和语言包。根据具体的需求和项目情况,可以选择适合的方法来使用TinyMCEVue进行富文本编辑。 #### 引用[.reference_title] - *1* [TinyMCE富文本编辑器在Vue使用](https://blog.csdn.net/weixin_40252368/article/details/123369109)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [tinymcevue使用](https://blog.csdn.net/qq_45164516/article/details/122435291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值