Vue集成TinyMCE富文本编辑器的流程步骤

 更新时间:2024年11月28日 08:52:36   作者:寻找09之夏  
TinyMCE 是一款功能强大的富文本编辑器,广泛应用于各种 Web 应用中,本文将详细介绍如何在 Vue 项目中集成 TinyMCE,通过详尽的步骤说明、示例代码展示以及丰富的配置选项,助力开发者轻松实现内容编辑的增强与美化,需要的朋友可以参考下

前提条件

  • 安装了 Node.js 和 npm。
  • 使用 Vue CLI 创建的 Vue 项目。
  • 熟悉基本的 Vue 开发。

1. 创建 Vue 项目

如果你还没有创建 Vue 项目,可以使用 Vue CLI 来快速搭建一个新的项目:

npm install -g @vue/cli
vue create tinymce-vue-demo
cd tinymce-vue-demo

选择默认配置或根据需要自定义配置(本案例选择地是 Vue3)。

2.引入 TinyMCE

将下载地 tinymce 包放在 public 目录下,配置 public/index.html  引入 tinymce.min.js 。

3. 配置 TinyMCE

首先,在你的 Vue 组件中引入并配置 TinyMCE。

<template>
  <div id="app">
    <h1>TinyMCE in Vue</h1>
    <textarea id="editor" v-model="form.content"></textarea>
  </div>
</template>
 
<script>
import { defineComponent, nextTick, onMounted, reactive } from "vue";
 
export default defineComponent({
  setup() {
    const form = reactive({
      content: "我是初始化内容",
    });
 
    // 动态引入 TinyMCE
    const loadTinyMCE = () => {
      return new Promise((resolve, reject) => {
        const script = document.createElement('script');
        script.src = '/tinymce/tinymce.min.js';
        script.onload = resolve;
        script.onerror = reject;
        document.head.appendChild(script);
      });
    };
 
    // 页面加载时
    onMounted(() => {
      loadTinyMCE().then(() => {
        // 富文本编辑器
        nextTick(() => {
          window.tinymce.init({
            selector: '#editor', // 选择器,指定哪个元素使用 TinyMCE
            license_key: 'gpl', // 许可密钥,如果是 GPL 版本则不需要设置
            language: 'zh_CN', // 语言设置
            width: '100%', // 编辑器宽度
            height: 500, // 编辑器高度
            menubar: true, // 是否显示菜单栏
            statusbar: true, // 是否显示状态栏
            branding: false, // 去除底部的 TinyMCE 广告
            plugins: [
              'advlist', 'autolink', 'lists', 'link', 'image', 'charmap', 'preview', 'anchor',
              'searchreplace', 'visualblocks', 'code', 'fullscreen', 'insertdatetime', 'media',
              'table', 'help', 'wordcount', 'emoticons', 'autosave', 'quickbars', 'codesample'
            ], // 启用的插件列表
            toolbar: [
              'code formatselect fontselect fontsizeselect forecolor backcolor bold italic underline strikethrough link alignment outdent indent bullist numlist blockquote subscript superscript removeformat table image media importword charmap pagebreak formatpainter cut copy undo redo restoredraft searchreplace fullscreen'
            ], // 工具栏按钮列表
            toolbar_sticky: true, // 工具栏固定在顶部
            content_css: '/path/to/content.css', // 自定义内容样式文件路径
            content_style: `
              h2 { position: relative; z-index: 99; }
              h2::before {
                content: "";
                display: block;
                width: 200px;
                height: 8px;
                position: absolute;
                bottom: 6px;
                left: -4px;
                z-index: -1;
                border-radius: 4px 0 0 4px;
                background: linear-gradient(90deg, #F6AFB0 0%, #FFFFFF 100%);
              }
            `, // 自定义编辑器内容的样式
            images_upload_handler: (blobInfo, success, failure) => {
              const xhr = new XMLHttpRequest();
              xhr.withCredentials = false;
              xhr.open('POST', '/your-backend-endpoint'); // 图片上传的后端接口
              xhr.onload = () => {
                if (xhr.status === 200) {
                  success(xhr.responseText); // 上传成功,返回图片 URL
                } else {
                  failure('HTTP Error: ' + xhr.status); // 上传失败,返回错误信息
                }
              };
              xhr.onerror = () => {
                failure('Image upload failed due to a network error.'); // 网络错误
              };
              xhr.send(blobInfo.blob()); // 发送图片数据
            },
            setup: (editor) => {
              editor.on('change', () => {
                form.content = editor.getContent(); // 监听编辑器内容变化并更新表单内容
              });
            }
          });
        });
      }).catch(error => {
        console.error('Failed to load TinyMCE:', error); // 处理 TinyMCE 加载失败的情况
      });
    });
 
    return {
      form
    };
  }
});
</script>
 
<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
</style>

4. 运行项目

确保一切配置正确后,运行你的 Vue 项目:

npm run serve

打开浏览器访问 http://localhost:8080,你应该能看到一个带有 TinyMCE 编辑器的页面。

5. 高级配置与功能

5.1 自动保存

自动保存用户的编辑内容:

autosave_interval: '5000',
autosave_prefix: 'tinymce-autosave-{path}{query}-{id}-',
autosave_restore_when_empty: true,
autosave_retention: '2m'

5.2 拼写检查

启用拼写检查功能:

spellchecker_languages: 'English=en,Spanish=es,German=de,French=fr,Italian=it,Portuguese=pt,Brazilian Portuguese=pt_BR',
spellchecker_rpc_url: '/your-spellcheck-endpoint'

5.3 自定义样式

为编辑器内容定义自定义的 CSS 样式:

content_css: '/path/to/your/custom.css'

5.4 实时协作(付费功能)

实时协作功能通常是一个付费功能,需要购买相应的许可证。 

结论

通过以上步骤,你已经成功地在 Vue 项目中集成了 TinyMCE 富文本编辑器,并且配置了多种高级功能。TinyMCE 提供了丰富的功能和灵活的配置选项,能够满足大多数 Web 应用的需求。如果需要更多高级功能,可以考虑购买 TinyMCE 的付费版本。希望这篇文章对你有所帮助!

到此这篇关于Vue集成TinyMCE富文本编辑器的流程步骤的文章就介绍到这了,更多相关Vue集成TinyMCE内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue如何解决每次发版都要强刷清除浏览器缓存问题

    Vue如何解决每次发版都要强刷清除浏览器缓存问题

    这篇文章主要介绍了Vue如何解决每次发版都要强刷清除浏览器缓存问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • 详解vue-cli 本地开发mock数据使用方法

    详解vue-cli 本地开发mock数据使用方法

    这篇文章主要介绍了详解vue-cli 本地开发mock数据使用方法,如果后端接口尚未开发完成,前端开发一般使用mock数据。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 如何封装axios form-data针对统一的formData入参方式

    如何封装axios form-data针对统一的formData入参方式

    这篇文章主要介绍了如何封装axios form-data针对统一的formData入参方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 手把手教你拿捏vue cale()计算函数使用

    手把手教你拿捏vue cale()计算函数使用

    这篇文章手把手教你拿捏vue cale()计算函数使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • vue-cli启动本地服务局域网不能访问的原因分析

    vue-cli启动本地服务局域网不能访问的原因分析

    这篇文章主要介绍了vue-cli启动本地服务,局域网下访问不到的原因分析,在文中还给大家介绍了vue-cli起的webpack项目 用localhost可以访问,但是切换到ip就不可以访问 的原因,本文给大家介绍的非常详细,需要的朋友参考下
    2018-01-01
  • Vue.js第二天学习笔记(vue-router)

    Vue.js第二天学习笔记(vue-router)

    这篇文章主要为大家详细介绍了Vue.js第二天的学习笔记,关于vue-router的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • 在vue3中使用import.meta.env

    在vue3中使用import.meta.env

    这篇文章主要介绍了在vue3中使用import.meta.env方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Vue3中Vite和Vue-cli的特点与区别详解

    Vue3中Vite和Vue-cli的特点与区别详解

    vue-cli是Vue早期推出的一款脚手架,使用webpack创建Vue项目,可以选择安装需要的各种插件,比如Vuex、VueRouter,下面这篇文章主要给大家介绍了关于Vue3中Vite和Vue-cli的特点与区别的相关资料,需要的朋友可以参考下
    2022-12-12
  • vue-cli构建的项目如何手动添加eslint配置

    vue-cli构建的项目如何手动添加eslint配置

    这篇文章主要介绍了vue-cli构建的项目如何手动添加eslint配置,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 在vue里面设置全局变量或数据的方法

    在vue里面设置全局变量或数据的方法

    下面小编就为大家分享一篇在vue里面设置全局变量或数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03

最新评论