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 相关文章推荐
[HTML/CSS/Javascript]WWTJS
Sep 25 Javascript
JavaScript定义类或函数的几种方式小结
Jan 09 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
Javscript调用iframe框架页面中函数的方法
Nov 01 Javascript
JavaScript的Ext JS框架中的GridPanel组件使用指南
May 21 Javascript
node.js express安装及示例网站搭建方法(分享)
Aug 22 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
ECMAScript6变量的解构赋值实例详解
Sep 19 Javascript
js实现购物车功能
Jun 12 Javascript
在vue中多次调用同一个定义全局变量的实例
Sep 25 Javascript
vue的for循环使用方法
Feb 12 Javascript
Vue实现星级评价效果实例详解
Dec 30 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
用PHPdig打造属于你自己的Google[图文教程]
2007/02/14 PHP
php若干单维数组遍历方法的比较
2011/09/20 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
兼容PHP和Java的des加密解密代码分享
2014/06/26 PHP
PHP遍历文件夹与文件类及处理类用法实例
2014/09/23 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
php实现文件预览功能
2017/05/23 PHP
Javascript - HTML的request类
2006/07/15 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
使用GruntJS构建Web程序之构建篇
2014/06/04 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
jQuery为DOM动态追加事件的方法
2017/02/16 Javascript
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
2019/05/01 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
jQuery表单校验插件validator使用方法详解
2020/02/18 jQuery
javascript单张多张图无缝滚动实例代码
2020/05/10 Javascript
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python实现Kmeans聚类算法
2020/06/10 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python Opencv实现图像轮廓识别功能
2020/03/23 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
德国健康生活方式网上商店:Landkaufhaus Mayer
2019/03/12 全球购物
党员批评与自我批评
2014/02/12 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
入党介绍人意见2015
2015/06/01 职场文书