Vue.js结合Ueditor富文本编辑器的实例代码


Posted in Javascript onJuly 11, 2017

在前端开发的项目中。难免会遇到需要在页面上集成一个富文本编辑器。
前一段时间公司Vue.js项目需要使用UEditor富文本编辑器,在百度上搜索一圈没有发现详细的说明,决定自己尝试,忙活了一天终于搞定了。

1. 总体思路

1.1 模块化

vue的很大的一个优势在于模块化,我们可以通过模块化实现页面和逻辑的复用。所以可以把Ueditor重新封装成一个.vue的模板文件。其他组件通过引入这个模板实现代码复用。

1.2 数据传输

首先父组件需要设置编辑器的长度、宽度、初始文本,这些数据可以通过props来传递。编辑器中的文本变化可以通过vue自定义事件向父组件传递。

2. 具体实现步骤

2.1 引入关键的JS以及CSS文件

将以下文件全部拷贝到项目中

Vue.js结合Ueditor富文本编辑器的实例代码

2.2 配置Ueditor.config.js

首先配置URL参数,我们需要将这个路径指向刚才拷贝的文件的更目录,注意这里最好使用相对路劲。

var URL = window.UEDITOR_HOME_URL || '/static/ueditor/';

然后是默认宽度高度的设置

,initialFrameWidth:null // null表示宽度自动
,initialFrameHeight:320

其他功能的配置可以在官方文档查看

2.3 创建编辑器模板

我们需要在编辑器模板中import Ueditor核心JS库,并添加contentChange回调函数就大功告成了。

之所以使用import语法来引入核心JS库是因为这样更符合ES6模块化的规范,我看到网上有人建议在main.js中引入JS,但是过早地引入JS可能导致页面首次加载缓慢。

<template>
 <div ref="editor"></div>
</template>

<script>
 /* eslint-disable */
 import '../../../assets/js/ueditor/ueditor.config';
 import '../../../assets/js/ueditor/ueditor.all';
 import '../../../assets/js/ueditor/lang/zh-cn/zh-cn';

 import { generateRandonInteger } from '../../../vuex/utils';

 export default {
 data() {
  return {
  id: generateRandonInteger(100000) + 'ueditorId',
  };
 },
 props: {
  value: {
  type: String,
  default: null,
  },
  config: {
  type: Object,
  default: {},
  }
 },
 watch: {
  value: function value(val, oldVal) {
  this.editor = UE.getEditor(this.id, this.config);
  if (val !== null) {
   this.editor.setContent(val);
  }
  },
 },
 mounted() {
  this.$nextTick(function f1() {
  // 保证 this.$el 已经插入文档

  this.$refs.editor.id = this.id;
  this.editor = UE.getEditor(this.id, this.config);

  this.editor.ready(function f2() {
   this.editor.setContent(this.value);

   this.editor.addListener("contentChange", function () {
   const wordCount = this.editor.getContentLength(true);
   const content = this.editor.getContent();
   const plainTxt = this.editor.getPlainTxt();
   this.$emit('input', { wordCount: wordCount, content: content, plainTxt: plainTxt });
   }.bind(this));

   this.$emit('ready', this.editor);
  }.bind(this));
  });
 },
 };
</script>

<style>
 body{
  background-color:#ff0000;
 }
</style>

3. 编辑器的使用

使用编辑器模板的时候我需要通过props传入config以及初始文本value。

<template xmlns:v-on="http://www.w3.org/1999/xhtml">
 <div class="edit-area">
  <ueditor v-bind:value=defaultMsg v-bind:config=config v-on:input="input" v-on:ready="ready"></ueditor>
 </div>

</template>

<script>
 import ueditor from './ueditor.vue';

 export default {
 components: {
  ueditor,
 },
 data() {
  return {
  defaultMsg: '初始文本', 
  config: {
   initialFrameWidth: null,
   initialFrameHeight: 320,
  },
  };
 },
 };
</script>

如果需要让Ueditor上传图片的话,还需要在后台配置一个接口。这部分还没有时间研究,等过几天补上

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

Javascript 相关文章推荐
jQuery 源码分析笔记(5) jQuery.support
Jun 19 Javascript
浅析AngularJS中的生命周期和延迟处理
Jun 18 Javascript
Node.js重新刷新session过期时间的方法
Feb 04 Javascript
jQuery使用经验小技巧(推荐)
May 31 Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
Aug 10 Javascript
Vue中引入样式文件的方法
Aug 18 Javascript
深入分析element ScrollBar滚动组件源码
Jan 22 Javascript
jQuery实现获取多选框的值示例
Feb 07 jQuery
修改Vue打包后的默认文件名操作
Aug 12 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
Oct 24 Javascript
JS中如何优雅的使用async await详解
Oct 05 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 #Javascript
JS自定义滚动条效果简单实现代码
Oct 27 #Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 #jQuery
微信小程序分页加载的实例代码
Jul 11 #Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 #Javascript
React入门教程之Hello World以及环境搭建详解
Jul 11 #Javascript
underscore之function_动力节点Java学院整理
Jul 11 #Javascript
You might like
PHP实现分页的一个示例
2006/10/09 PHP
php正则表达式(regar expression)
2011/09/10 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
无限树Jquery插件zTree的常用功能特性总结
2014/09/11 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
jQuery简单实现网页选项卡特效
2014/11/24 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
多种JQuery循环滚动文字图片效果代码
2020/06/23 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
python版本单链表实现代码
2018/09/28 Python
Python 取numpy数组的某几行某几列方法
2019/10/24 Python
pandas 空数据处理方法详解
2019/11/02 Python
Python之Django自动实现html代码(下拉框,数据选择)
2020/03/13 Python
为什么python比较流行
2020/06/19 Python
python如何实时获取tcpdump输出
2020/09/16 Python
Jmeter调用Python脚本实现参数互相传递的实现
2021/01/22 Python
幼儿教师自我鉴定
2013/11/02 职场文书
餐厅总经理岗位职责
2013/12/31 职场文书
对公司合理化的建议书
2014/03/12 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
自查自纠工作总结
2014/10/15 职场文书
小学运动会报道稿
2015/07/22 职场文书
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL
Redis keys命令的具体使用
2022/06/05 Redis