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从10种颜色中随机取色实现每次取出不同的颜色
Oct 23 Javascript
js关于字符长度限制的问题示例探讨
Jan 24 Javascript
函数window.open实现关闭所有的子窗口
Aug 03 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
jQuery实现带动画效果的多级下拉菜单代码
Sep 08 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
axios的拦截请求与响应方法
Aug 11 Javascript
JS实现点击li标签弹出对应的索引功能【案例】
Feb 18 Javascript
JS module的导出和导入的实现代码
Feb 25 Javascript
微信小程序前端自定义分享的实现方法
Jun 13 Javascript
node.js Promise对象的使用方法实例分析
Dec 26 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
桌面中心(二)数据库写入
2006/10/09 PHP
php 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
PHP实现图片裁剪、添加水印效果代码
2014/10/01 PHP
wamp服务器访问php非常缓慢的解决过程
2015/07/01 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
return false;和e.preventDefault();的区别
2010/07/11 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
js简单实现标签云效果实例
2015/08/06 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
纯css下拉菜单 无需js
2016/08/15 Javascript
jQuery表单事件实例代码分享
2016/08/18 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
Vue.js系列之项目搭建(1)
2017/01/03 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
详解Python字符串对象的实现
2015/12/24 Python
详解Python字典小结
2018/10/20 Python
python实现图像全景拼接
2020/03/27 Python
python 制作简单的音乐播放器
2020/11/25 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
For Art’s Sake官网:手工制作的奢华眼镜
2018/12/15 全球购物
大学军训感言1500字
2014/03/09 职场文书
班级读书活动总结
2014/06/30 职场文书
2014年市场部工作总结
2014/11/25 职场文书
人事局接收函
2015/01/30 职场文书
党员反腐倡廉学习心得体会
2015/08/15 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python
Java实现聊天机器人完善版
2021/07/04 Java/Android
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang