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 相关文章推荐
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
SyntaxHighlighter语法高亮插件使用说明
Aug 14 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
Sep 09 Javascript
JavaScript 性能优化小结
Oct 12 Javascript
js实现表单提交后不重新刷新当前页面
Nov 30 Javascript
JavaScript箭头(arrow)函数详解
Jun 04 Javascript
JavaScript执行环境及作用域链实例分析
Aug 01 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
Dec 16 Javascript
jquery实现点击弹出对话框
Feb 08 jQuery
实例讲解React 组件生命周期
Jul 08 Javascript
微信小程序实现时间戳格式转换
Jul 20 Javascript
JavaScript交换变量常用4种方法解析
Sep 02 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
利用原生js和jQuery实现单选框的勾选和取消操作的方法
2016/09/04 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
Bootstrap里的文件分别代表什么意思及其引用方法
2017/05/01 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
pytorch构建网络模型的4种方法
2018/04/13 Python
对Python3中dict.keys()转换成list类型的方法详解
2019/02/03 Python
TensorFlow卷积神经网络之使用训练好的模型识别猫狗图片
2019/03/14 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
python生成特定分布数的实例
2019/12/05 Python
keras实现多种分类网络的方式
2020/06/11 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
企业给企业的表扬信
2014/01/13 职场文书
四年级数学教学反思
2014/02/02 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
责任书格式
2015/01/29 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
民主生活会意见
2015/06/05 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
python中tkinter复选框使用操作
2021/11/11 Python