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 相关文章推荐
不错的JS中变量相关的细节分析
Aug 13 Javascript
jquery中的查找parents与closest方法之间的区别
Dec 02 Javascript
JS实现窗口加载时模拟鼠标移动的方法
Jun 03 Javascript
bootstrap table动态加载数据示例代码
Mar 25 Javascript
react实现菜单权限控制的方法
Dec 11 Javascript
Vue组件化开发思考
Feb 02 Javascript
Vue波纹按钮组件制作
Apr 30 Javascript
详解处理bootstrap4不支持远程静态框问题
Jul 20 Javascript
详解JWT token心得与使用实例
Aug 02 Javascript
微信小程序复选框实现多选一功能过程解析
Feb 14 Javascript
让IDE识别webpack的别名alias的实现方法
May 06 Javascript
Ajax请求超时与网络异常处理图文详解
May 23 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中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
javaScript 删除字符串空格多种方法小结
2012/10/24 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
2015/11/26 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
简述jQuery Easyui一些用法
2017/08/01 jQuery
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
深入理解Angularjs 脏值检测
2018/10/12 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
python如何实现反向迭代
2018/03/20 Python
python使用epoll实现服务端的方法
2018/10/16 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python基础梳理(一)(推荐)
2019/04/06 Python
python3 map函数和filter函数详解
2019/08/26 Python
如何基于python实现归一化处理
2020/01/20 Python
利用python画出AUC曲线的实例
2020/02/28 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Python获取excel内容及相关操作代码实例
2020/08/10 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
Html5原生拖拽相关事件简介以及基础实现
2020/11/19 HTML / CSS
影视制作岗位职责
2013/12/04 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
导游词之临安白水涧
2019/11/05 职场文书
Vue如何清空对象
2022/03/03 Vue.js