vue中如何使用TinyMCE

<教程:>(TinyMCE | Documentation)

安装tinyMce 并且初始化

首先需要新建一个vue项目

vue create tinymce-editor

按照下图选择即可

然后删除掉没有用的组件,保持代码整洁可扩展(比如logo,还有helloworld.vue)

然后访问官网Free WYSIWYG HTML Editor | Download TinyMCE or Get Cloud Version | TinyMCE
这里选择 here 选择 4.x的版本,因为6版本刚出肯定是不合适的,5的话 和vue2.x 好像是有些小问题,所以这里我们选择4.x的版本。
然后点击下载即可
解压到我们目标文件中的publc下
然后再index.html目录下添加我们的tinymce.min.js的路径
然后在APP.vue目录下使用

<template>
  <div id="app">
    <textarea id="mytextarea"></textarea>
  </div>
</template>

<script>

export default {
  name: 'App',
  mounted() {
    tinymce.init({
      selector: '#mytextarea',
    });
  }
}
</script>

结果如下
这样就代表引入完成了。

中文汉化

在我们完成之后,我们需要对我们的富文本编译器进行汉化
点击如下连接: Custom HTML Builds | Trusted Rich Text Editor | TinyMCE
选择自己想要的语言包,这里我选择的是简体中文包

解压文件 并且复制文件夹langs 并且放入如下文件夹。

然后在index.html中引入

还需要在app.vue中如此引入

<script>

export default {
  name: 'App',
  mounted() {
    tinymce.init({
      selector: '#mytextarea',
      language: 'zh-Hans',
    });
  }
}
</script>

然后查看页面 即完成

配置工具栏

TinyMCE | Editor Appearance
空间列表如下:TinyMCE | Editor Control Identifiers


有core代表是官方的插件,其他的需要配置url或者是下载其他的插件方可使用。

我们添加几个插件看看
在app.vue中添加如下代码

<script>

export default {
  name: 'App',
  mounted() {
    tinymce.init({
      selector: '#mytextarea',
      language: 'zh-Hans',
      toolbar: 'newdocument bold italic underline strikethrough aligncenter alignnone'
    });
  }
}
</script>

效果如下图

当然 互相之间还可以加个分割符号,当然显示的时候也会带一个分隔符

  • 如果不想要toolbar 就写成toolbar: false
  • 如果要多个toolbar 就写成 toolbar: ['newdocument bold italic underline', 'strikethrough aligncenter alignnone']
  • 多行工具栏还可以写成 toolbar1:... toolbar2:.... toolbar3:.....

配置菜单栏

TinyMCE | Editor Appearance

空间列表如下TinyMCE | Editor Control Identifiers

修改代码如下

<script>

export default {
  name: 'App',
  mounted() {
    tinymce.init({
      selector: '#mytextarea',
      language: 'zh-Hans',
      toolbar: 'newdocument bold italic underline strikethrough aligncenter alignnone',
      menu: {
        file: { title: 'File', items: 'newdocument' },
      }
    });
  }
}
</script>

效果如下

  • 不想要menu菜单 menu:false
  • 也可以利用字符串 menu:'file edit' 但个人感觉非常不好用

添加插件

TinyMCE | Add Plugins to TinyMCE


举例:
如果想引入hr这个插件
需要在index.html中引入该插件

<script src="<%= BASE_URL %>tinymce/plugins/hr/plugin.min.js"></script>

然后在app.vue中注册

export default {
  name: 'App',
  mounted() {
    tinymce.init({
      selector: '#mytextarea',
      language: 'zh-Hans',
      toolbar: 'newdocument bold italic underline strikethrough aligncenter alignnone hr',
      menu: {
        file: { title: 'File', items: 'newdocument' },
        水平分割线: { title: '水平分割线', items: 'hr' },
      },
      plugins: 'hr'
    });
  }
}

这样就代表引入成功了。

还有些付费插件,操作也是一样的

富文本编译器的生命周期 事件监听 常用方法。

一共有两个生命周期函数

  1. setup ————还没渲染到页面之前所执行的方法
  2. init_instance_callback ————页面渲染完毕所执行的函数
export default {
  name: 'App',
  mounted() {
    tinymce.init({
      selector: '#mytextarea',
      language: 'zh-Hans',
      toolbar: 'newdocument bold italic underline strikethrough aligncenter alignnone hr',
      menu: {
        file: { title: 'File', items: 'newdocument' },
        水平分割线: { title: '水平分割线', items: 'hr' },
      },
      plugins: 'hr',
      setup: function (editor) {
        console.log("setup函数开始执行>>>>>>", editor);
        editor.on('click', function (e) {
          console.log('click事件触发>>>>>>', editor.getContent());
        });
      },
      init_instance_callback: function (editor) {
        console.log("init_instance_callback函数开始执行>>>>>>", editor);
        editor.setContent("<p>hello</p>");
      }
    });
  }
}

结果如下:

editor 绑定的是对象 可以执行click事件等
具体可以绑定哪些时间
见如下链接TinyMCE | Editor Events

异步加载Tinymce

由于用的index.html去引入文件
然而vue不推荐直接在index.html里引入tinymce,引进去无论项目是否用到编辑器都会加载tinymce相关代码。
而且这样可能会导致页面白屏,所以我们需要通过异步加载JS
只有用到编译器才会加载 不用到就不会加载

第一种方式:Using TinyMCE from the Tiny Cloud CDN with the Vue.js framework | TinyMCE Documentation
安装

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

<template>
  <div id="app">
    <Editor api-key="no-api-key" :init="{}" />

  </div>
</template>

<script>
import Editor from '@tinymce/tinymce-vue'
export default {
  name: 'App',

  components: {
    Editor
  }
}
</script>

<style></style>

效果如下:

第二种:https://github.com/PanJiaChen/vue-element-admin/blob/master/src/components/Tinymce/dynamicLoadScript.js
把index.html注释掉
然后添加dynamicLoadScript.js 到目录中
然后在app文件中

<template>
  <textarea id="tinymceID" class="tinymceID-textarea"></textarea>
</template>

<script>
import load from "./dynamicLoadScript";

const tinymceURL = "https://cdn.jsdelivr.net/npm/tinymce@5.1.0/tinymce.min.js"

export default {
  name: "App",
  mounted() {
    this.init();
  },
  methods: {
    init() {
      load(tinymceURL, (err) => {
        if (err) {
          console.log("错误", err);
          return
        }
        this.initTinymce();
      })
    },
    initTinymce() {
      window.tinymce.init({
        selector: '#tinymceID',

      });
    }
  }
}
</script>

CDN服务器需要自己部署

var code = "14fa3352-d309-4ce7-a5d1-0f808b8e07e8"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值