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 相关文章推荐
jquery插件开发方法(初学者)
Feb 03 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
JavaScript String.replace函数参数实例说明
Jun 06 Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 Javascript
JavaScript必知必会(二) null 和undefined
Jun 08 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
Sep 17 Javascript
利用js编写响应式侧边栏
Sep 17 Javascript
angular基于路由控制ui-router实现系统权限控制
Sep 27 Javascript
jQuery实现图片轮播效果代码
Sep 27 Javascript
vue-cli启动本地服务局域网不能访问的原因分析
Jan 22 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
Jul 25 jQuery
JavaScript 预解析的4种实现方法解析
Sep 03 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获取客户端及服务器端IP的封装类
2016/07/21 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
js 遍历json返回的map内容示例代码
2013/10/29 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
让alert不出现弹窗的两种方法
2014/05/18 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
jQuery中wrapAll()方法用法实例
2015/01/16 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
javascript解析xml实现省市县三级联动的方法
2015/07/25 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
Bootstrap提示框效果的实例代码
2017/07/12 Javascript
IScroll5实现下拉刷新上拉加载的功能实例
2017/08/11 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
Vuex提升学习篇
2018/01/11 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
JsonProperty 的使用方法详解
2019/10/11 Javascript
js实现录音上传功能
2019/11/22 Javascript
Python升级导致yum、pip报错的解决方法
2017/09/06 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Django如何配置mysql数据库
2018/05/04 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
Python 带星号(* 或 **)的函数参数详解
2021/02/23 Python
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
大学生表扬信范文
2014/01/09 职场文书
大型活动策划方案
2014/01/12 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python