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 相关文章推荐
event.keyCode键码值表 附只能输入特定的字符串代码
May 15 Javascript
jquery 操作DOM案例代码分享
Apr 05 Javascript
jquery通过a标签删除table中的一行的代码
Dec 02 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
jQuery实现的进度条效果
Jul 15 Javascript
JS中sort函数排序用法实例分析
Jun 16 Javascript
AngularJS自定义服务与fliter的混合使用
Nov 24 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
JS正则表达式之非捕获分组用法实例分析
Dec 28 Javascript
简单谈谈React中的路由系统
Jul 25 Javascript
浅析node.js的模块加载机制
May 25 Javascript
浅析我对JS延迟异步脚本的思考
Oct 12 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获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
2015/04/16 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
详细分析vue响应式原理
2020/06/22 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
python如何读写csv数据
2018/03/21 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
2019/08/24 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
2019/12/27 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
Java面向对象面试题
2016/12/26 面试题
应届生妇产科护士求职信
2013/10/27 职场文书
大学秋游活动方案
2014/02/11 职场文书
网络技术专业求职信
2014/02/18 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
校庆标语集锦
2014/06/25 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
OpenCV 图像梯度的实现方法
2021/07/25 Python
MySQL数据库超时设置配置的方法实例
2021/10/15 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL
开发微信小程序之WXSS样式教程
2022/04/18 HTML / CSS