Vue+Webpack完美整合富文本编辑器TinyMce的方法


Posted in Javascript onNovember 30, 2018

选择一个合适的富文本编辑器对于一个前端项目至关重要,这次我基于Vue来开发我项目中的前端部分,经过权衡选择了tinymce。其在UI,功能都很适合,tinymce官方文档:点击打开链接;

引入tinymce 我选用的版本4.7.4

npm install tinymce -S

将tinymce创建为Vue的组件,便于日后复用,创建组件editor.vue

<template>
    <textarea :id="id" :value="value"></textarea>
</template>
<script>
  // Import TinyMCE
  import tinymce from 'tinymce/tinymce';
  import 'tinymce/themes/modern/theme';
  import 'tinymce/plugins/paste';
  import 'tinymce/plugins/link';
  const INIT = 0;
  const CHANGED = 2;
  var EDITOR = null;
  export default {
    props: {
      value: {
        type: String,
        required: true
      },
      setting: {}
    },
    watch: {
      value: function (val) {
        console.log('init ' + val)
        if (this.status == INIT || tinymce.activeEditor.getContent() != val){
          tinymce.activeEditor.setContent(val);
        }
        this.status = CHANGED
      }
    },
    data: function () {
      return {
        status: INIT,
        id: 'editor-'+new Date().getMilliseconds(),
      }
    },
    methods: {
    },
    mounted: function () {
      const _this = this;
      const setting =
        {
          selector:'#'+_this.id,
          language:"zh_CN",
          init_instance_callback:function(editor) {
            EDITOR = editor;
            console.log("Editor: " + editor.id + " is now initialized.");
            editor.on('input change undo redo', () => {
              var content = editor.getContent()
              _this.$emit('input', content);
            });
          },
          plugins:[]
        };
      Object.assign(setting,_this.setting)
      tinymce.init(setting);
    },
    beforeDestroy: function () {
      tinymce.get(this.id).destroy();
    }
  }
  
</script>

在钩子mounted 进行了tinymce的初始化工作,调用 tinymce.init(setting),setting为配置信息这样我们便初步配置完成了editor组件

在其他页面使用组件

<template>
  <div class="app-container">
    <div>
      <!-- 组件有两个属性 value 传入内容双向绑定 setting传入配置信息 -->
      <editor class="editor" :value="content" :setting="editorSetting" @input="(content)=> content = content"></editor>
    </div>
 
  </div>
</template>
<script>
  import editor from '@/components/editor'
  export default {
    name: "editor-demo",
    data: function () {
      return {
        content:'我是富文本编辑器的内容',
        //tinymce的配置信息 参考官方文档 https://www.tinymce.com/docs/configure/integration-and-setup/
        editorSetting:{
          height:400,
        }
      }
    },
    components:{
      'editor':editor
    }
  }
</script>
<style scoped>
</style>

此刻我们已经完成了百分之90的配置 ,最后只需将node_modules/_tinymce@4.7.4@tinymce/文件夹下的skins文件夹放置于项目根目录下,这样tinymce才可获取皮肤css文件

下载并解压语言包langs文件夹放置项目根目录,中文下载链接 ,其他语言包选择;

之后在页面轻松使用组件

Vue+Webpack完美整合富文本编辑器TinyMce的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
Sep 30 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
BootStrap实现响应式布局导航栏折叠隐藏效果(在小屏幕、手机屏幕浏览时自动折叠隐藏)
Nov 30 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
JS实现多张图片预览同步上传功能
Jun 23 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
Dec 30 Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 Javascript
详解Vue中watch的详细用法
Nov 28 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
Mar 19 Javascript
JavaScript动态添加数据到表单并提交的几种方式
Jun 26 Javascript
通过layer实现可输入的模态框的例子
Sep 27 Javascript
JS轻量级函数式编程实现XDM二
Jun 16 Javascript
jQuery实现网页拼图游戏
Apr 22 #jQuery
vue 双向数据绑定的实现学习之监听器的实现方法
Nov 30 #Javascript
基于jquery实现九宫格拼图小游戏
Nov 30 #jQuery
微信小程序canvas.drawImage完全显示图片问题的解决
Nov 30 #Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
Nov 30 #Javascript
微信小程序实现保存图片到相册功能
Nov 30 #Javascript
js canvas实现写字动画效果
Nov 30 #Javascript
You might like
CI框架集成Smarty的方法分析
2016/05/17 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
Alliance vs AM BO3 第二场2.13
2021/03/10 DOTA
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
js+css实现的简单易用兼容好的分页
2013/12/30 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
jquery.serialize() 函数语法及简单实例
2016/07/08 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
vue文件运行的方法教学
2019/02/12 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
[04:45]DOTA2上海特级锦标赛主赛事第四日RECAP
2016/03/06 DOTA
Python不规范的日期字符串处理类
2014/06/10 Python
Python求算数平方根和约数的方法汇总
2016/03/09 Python
Python实现字典去除重复的方法示例
2017/07/31 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
2018/04/18 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python实现猜数字小游戏
2020/03/24 Python
python中map的基本用法示例
2018/09/10 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
python hough变换检测直线的实现方法
2019/07/12 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
使用sklearn对多分类的每个类别进行指标评价操作
2020/06/11 Python
python中关于数据类型的学习笔记
2020/07/19 Python
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
Carmen Sol官网:购买果冻鞋、手袋和配件
2021/01/01 全球购物
开办饭店创业计划书
2013/12/28 职场文书
学生党员思想汇报范文
2014/01/09 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
财务务虚会发言材料
2014/10/20 职场文书
淘宝文案策划岗位职责
2015/04/14 职场文书
详解Python中下划线的5种含义
2021/07/15 Python