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 相关文章推荐
javascript replace方法与正则表达式
Feb 19 Javascript
JavaScript 拾碎[三] 使用className属性
Oct 16 Javascript
本地对象Array的原型扩展实现代码
Dec 04 Javascript
javascript实现列表滚动的方法
Jul 30 Javascript
分分钟玩转Vue.js组件
Oct 25 Javascript
详解JavaScript跨域总结与解决办法
Oct 31 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
vue.js内部自定义指令与全局自定义指令的实现详解(利用directive)
Jul 11 Javascript
JavaScript正则表达式和级联效果
Sep 14 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
Oct 04 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
Jul 26 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 session处理的定制
2009/03/16 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
许愿墙中用到的函数
2006/10/07 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
javascript动态生成树形菜单的方法
2015/11/14 Javascript
jQuery插件之Tocify动态节点目录菜单生成器附源码下载
2016/01/08 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
easyui combogrid实现本地模糊搜索过滤多列
2017/05/13 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
浅谈vue-router 路由传参的方法
2017/12/27 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
用python删除java文件头上版权信息的方法
2014/07/31 Python
python查找指定具有相同内容文件的方法
2015/06/28 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
深入理解python对json的操作总结
2017/01/05 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
用python处理MS Word的实例讲解
2018/05/08 Python
Django中的文件的上传的几种方式
2018/07/23 Python
对python中的try、except、finally 执行顺序详解
2019/02/18 Python
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
ivx平台开发之不用代码实现一个九宫格抽奖功能
2021/01/27 HTML / CSS
个性化皮包、小袋、生活配件:Mon Purse
2019/03/26 全球购物
匡威爱尔兰官网:Converse爱尔兰
2019/06/09 全球购物
护士个人简历自荐信
2013/10/18 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
社区交通安全实施方案
2014/03/22 职场文书
临床护理求职信
2014/04/26 职场文书
汽车广告策划方案
2014/05/31 职场文书
转让协议书
2015/01/27 职场文书
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技