在vue中使用tinymce富文本

本文主要介绍两种方式:

目录

第一种是直接加载远程脚本,不需要任何依赖:

第二种是使用tinymce-vue来整合tinymce(本文使用tinymce版本为5.2.1)


第一种是直接加载远程脚本,不需要任何依赖:

优点:在于下载文件就可以直接使用,不需要再进行其他处理。

缺点:因为是通过cdn加载的,这就需要依赖第三方,存在不稳定因素(当然这种情况可能会很少,但不排除存在)。还有就是可能在请求资源中会保频繁请求的错误。

这是具体实现的效果,支持所有的功能:

这是加载远程脚本的js文件:

这里是tinymce组件:

这里是再页面上使用:

<template>
  <div class="home">
    <Tinymce v-model="value" :height="500"></Tinymce>
  </div>
</template>

<script>
// @ is an alias to /src
import Tinymce from '@/components/tinymce/index.vue';

export default {
  name: 'Home',
  data(){
    return {
      value:"示例"
    }
  },
  components: {
    Tinymce
  }
}
</script>

源码下载地址:https://download.csdn.net/download/a1983029606/19805481?spm=1001.2014.3001.5501

第二种是使用tinymce-vue来整合tinymce(本文使用tinymce版本为5.2.1)

这种方式需要安装依赖,我这里使用cnpm来安装的,也可使用npm

cnpm install @tinymce/tinymce-vue -S

cnpm install tinymce

安装好过后,在node_modules找到tinymce文件

再将文件放在自己本地项目

我这里是将文件分开放的,当然也可以放在一个地方。语言包需要自己去官网下载,下载地址

https://www.tiny.cloud/get-tiny/language-packages/

这样就可以开始使用了

<template>
  <div class="tinymce-editor">
    <editor
      v-model="myValue"
      :init="init"
      :disabled="disabled"
      @onClick="onClick"
      :id="tinymceId"
    >
    </editor>
  </div>
</template>
<script>
import axios from "axios";
const http = axios.create({
  // baseURL: process.env.VUE_APP_API_URL || '/admin/api',
  baseURL: "./admin"
});
import tinymce from "@/assets/tinymce/tinymce";
import Editor from "@tinymce/tinymce-vue";
import "./importTinymcePlugins";

// import 'tinymce/icons/default/icons';
export default {
  components: {
    Editor
  },
  props: {
    value: {
      type: String,
      default: ""
    },
    // 基本路径,默认为空根目录,如果你的项目发布后的地址为目录形式,
    // 即abc.com/tinymce,baseUrl需要配置成tinymce,不然发布后资源会找不到
    baseUrl: {
      type: String,
      default: ""
    },
    disabled: {
      type: Boolean,
      default: false
    },
    plugins: {
      type: [String, Array],
      default:
        "noneditable autoresize lists quickbars image table  wordcount fullscreen template"
    },
    toolbar: {
      type: [String, Array],
      default:
        "fontsizeselect | fontselect | forecolor backcolor bold italic | alignleft aligncenter alignright | bullist numlist outdent indent | table"
    },
    readonly:{
      type: Boolean,
      default: false
    },
    auto_focus:{
      type: Boolean,
      default: true
    },
    id: {
      type: String,
      default: () => {
        num === 10000 && (num = 1);
        return `tinymce${+new Date()}${num++}`;
      }
    }
  },
  data() {
    return {
      init: {
        external_plugins: {},
        selector: `#${this.tinymceId}`,
        language_url: require("../../../../public/tinymce/langs/zh_CN.js"),
        language: "zh_CN",
        skin_url: `${this.baseUrl}/tinymce/skins/ui/oxide`, //`${this.baseUrl}/tinymce/skins/ui/oxide`
        content_css: require("../../../../public/tinymce/skins/content/default/content.css"), //`${this.baseUrl}/tinymce/skins/content/default/content.css`
        images_upload_base_path: "/demo",
        fontsize_formats: "12px 14px 16px 18px 24px 36px 48px 56px 72px",
        font_formats: '默认字体="Calibri,Helvetica Neue,Helvetica";宋体=宋体;Arial=arial,helvetica,sans-serif;',
        plugins: this.plugins,
        toolbar: this.toolbar,
        menubar: false,
        branding: false,
        auto_focus: this.auto_focus,
        powerpaste_word_import: "propmt", // 参数可以是propmt, merge, clear,效果自行切换对比
        powerpaste_html_import: "propmt", // propmt, merge, clear
        powerpaste_allow_local_images: true,
        paste_data_images: true,
        visual_table_class:"my_table_class",
        content_style: "table {width:calc(100% - 8px) !important;}",
        // 行内模式
        inline: true,
        toolbar_sticky: false,
        // 快速访问工具栏目
        quickbars_insert_toolbar: false,
        quickbars_image_toolbar: false,
        quickbars_selection_toolbar:
          "fontsizeselect | fontselect | forecolor backcolor bold italic | alignleft aligncenter alignright | bullist numlist outdent indent | table",
        // 此处为图片上传处理函数,这个直接用了base64的图片形式上传图片,
        // 如需ajax上传可参考https://www.tiny.cloud/docs/configure/file-image-upload/#images_upload_handler
        images_upload_handler: (blobInfo, success, failure) => {
          let formData = new FormData();
          // console.log(blobInfo.blob().type);

          formData.append("file", blobInfo.blob());

          http.post("file", formData).then(response => {
            // console.log(response.data["url"]);
            if (response.data["status"] == 200) {
              success(response.data["url"]);
            } else {
              failure("上传失败!");
            }
          });
        }
      },
      myValue: this.value,
      tinymceId: ""
    };
  },
  created() {
    this.tinymceId = this.id;
  },
  mounted() {
    tinymce.init({});
    //获取焦点光标到最后面
  },
  methods: {
    // 添加相关的事件,可用的事件参照文档=> https://github.com/tinymce/tinymce-vue => All available events
    // 需要什么事件可以自己增加
    onClick(e) {
      this.$emit("onClick", e, tinymce);
    },
    // 可以添加一些自己的自定义事件,如清空内容
    clear() {
      this.myValue = "";
    }
  },
  watch: {
    value(newValue) {
      this.myValue = newValue;
    },
    myValue(newValue) {
      this.$emit("input", newValue);
    }
  }
};
</script>
<style scoped lang="scss">
#tinydemo {
  height: 100%;
  width: 100%;
  text-align: left;
}

.mce-edit-focus {
  height: 100%;
  width: 100%;
  p {
    margin: 0 8px !important;
  }
}
</style>

importTinymcePlugins.js

import "@/assets/tinymce/themes/silver";
// 编辑器插件plugins
// 更多插件参考:https://www.tiny.cloud/docs/plugins/
import "@/assets/tinymce/plugins/image"; // 插入上传图片插件
import "@/assets/tinymce/plugins/media"; // 插入视频插件
import "@/assets/tinymce/plugins/table"; // 插入表格插件
import "@/assets/tinymce/plugins/lists"; // 列表插件
import "@/assets/tinymce/plugins/wordcount"; // 字数统计插件
import "@/assets/tinymce/plugins/colorpicker";
import "@/assets/tinymce/plugins/fullscreen";
import "@/assets/tinymce/plugins/autolink";
import "@/assets/tinymce/plugins/link";
import "@/assets/powerpaste";
import "@/assets/tinymce/plugins/autoresize";
import "@/assets/tinymce/plugins/preview";
import "@/assets/tinymce/plugins/template";
import "@/assets/tinymce/plugins/quickbars";
import "@/assets/tinymce/plugins/noneditable";
import "@/assets/tinymce/plugins/print";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue3使用Tinymce富文本编辑器,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了TinymceTinymce-Vue的相关包。你可以通过运行以下命令来安装Tinymce-Vue版本3: ``` npm install --save @tinymce/tinymce-vue@^3 ``` 2. 在你的Vue组件,引入Tinymce-Vue组件: ```javascript import { Editor } from '@tinymce/tinymce-vue'; ``` 3. 在你的模板使用Tinymce-Vue组件: ```html <template> <div> <editor v-model="content" :init="editorConfig"></editor> </div> </template> ``` 4. 在你的Vue组件,定义Tinymce的配置项: ```javascript export default { data() { return { content: '', editorConfig: { // 在这里配置Tinymce的选项 } }; } } ``` 5. 根据你的需求,配置Tinymce的选项。你可以参考Tinymce的官方文档和文文档来了解所有可用的选项。你也可以参考Tinymce-Vue在GitHub上的项目来获取更多示例和用法。 请注意,Tinymce-Vue版本4支持Vue3.0,而不支持Vue2.0。如果你的项目是Vue2.0,你需要安装Tinymce-Vue版本3。 希望这些信息对你有帮助!如果你需要更多的参考文档,你可以访问Tinymce的官方网站和文文档,以及Tinymce-Vue在GitHub上的项目。 #### 引用[.reference_title] - *1* *2* *3* [在vue3.0项目使用tinymce富文本编辑器](https://blog.csdn.net/mrjimin/article/details/121648927)[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^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值