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支持带x身份证号码验证函数
Aug 10 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
Apr 15 Javascript
jQuery的实现原理的模拟代码 -5 Ajax
Aug 07 Javascript
jquery中focus()函数实现当对象获得焦点后自动把光标移到内容最后
Sep 29 Javascript
javascript阻止scroll事件多次执行的思路及实现
Nov 08 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
jQuery+css实现的换页标签栏效果
Jan 27 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
May 20 Javascript
node网页分段渲染详解
Sep 05 Javascript
jquery实现tab键进行选择后enter键触发click行为
Mar 29 jQuery
Vue v2.4中新增的$attrs及$listeners属性使用教程
Jan 08 Javascript
用原生 JS 实现 innerHTML 功能实例详解
Apr 03 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
Protoss建筑一览
2020/03/14 星际争霸
初探PHP5
2006/10/09 PHP
探讨GDFONTPATH能否被winxp下的php支持
2013/06/21 PHP
PHP批量上传图片的具体实现方法介绍.
2014/02/26 PHP
php获取一个变量的名字的方法
2014/09/05 PHP
php动态生成缩略图并输出显示的方法
2015/04/20 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
ASP SQL防注入的方法
2008/12/25 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
JavaScript继承基础讲解(原型链、借用构造函数、混合模式、原型式继承、寄生式继承、寄生组合式继承)
2014/08/16 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
javascript实现的图片切割多块效果实例
2015/05/07 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
两种简单的跨域方法(jsonp、php)
2017/01/02 Javascript
Nodejs实现多房间简易聊天室功能
2017/06/20 NodeJs
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
js 两数组去除重复数值的实例
2017/12/06 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
Vue父子组件之间的通信实例详解
2018/09/28 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
2019/09/07 Javascript
浅谈Python 对象内存占用
2016/07/15 Python
Python实现的质因式分解算法示例
2018/05/03 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
使用python3实现操作串口详解
2019/01/01 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
计算机二级python学习教程(3) python语言基本数据类型
2019/05/16 Python
python安装scipy的方法步骤
2019/06/26 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
记一次Django响应超慢的解决过程
2020/09/17 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
大学生评语大全
2014/04/18 职场文书
乡镇挂职心得体会
2014/09/04 职场文书