最近用vue+element-ui开发一套后台管理系统,其中项目中需要用到富文本编辑器,这里总结下开发过程中遇到的坑和使用方法。

刚开始用的是vue-quill-editor结合element-ui上传图片到服务器,name问题来了 按照官方文档上面的方式。下面是我的代码

<template>
<div><!-- 图片上传组件辅助--><el-uploadclass="avatar-uploader":action="serverUrl"name="img":headers="header":show-file-list="false":on-success="uploadSuccess":on-error="uploadError":before-upload="beforeUpload"></el-upload><!--富文本编辑器组件--><el-row v-loading="uillUpdateImg"><quill-editorv-model="detailContent"ref="myQuillEditor":options="editorOption"@change="onEditorChange($event)"@ready="onEditorReady($event)"></quill-editor></el-row>
</div>
</template>
<script>export default {data() {return {quillUpdateImg: false, // 根据图片上传状态来确定是否显示loading动画,刚开始是false,不显示serverUrl: '',  // 这里写你要上传的图片服务器地址header: {token: sessionStorage.token},  // 有的图片服务器要求请求头需要有token之类的参数,写在这里detailContent: '', // 富文本内容editorOption: {}  // 富文本编辑器配置}},methods: {// 上传图片前beforeUpload(res, file) {},// 上传图片成功uploadSuccess(res, file) {},// 上传图片失败uploadError(res, file) {}}
}
</script>
那么我们需要怎样将富文本图片上传这个按钮跟自定义的文件上传做绑定呢。

很简单,我们需要在editorOption配置中这么写
export default {
data() {return {quillUpdateImg: false, // 根据图片上传状态来确定是否显示loading动画,刚开始是false,不显示serverUrl: '',  // 这里写你要上传的图片服务器地址header: {token: sessionStorage.token},  // 有的图片服务器要求请求头需要有token之类的参数,写在这里detailContent: '', // 富文本内容editorOption: {placeholder: '',theme: 'snow',  // or 'bubble'modules: {toolbar: {container: toolbarOptions,  // 工具栏handlers: {'image': function (value) {if (value) {document.querySelector('#quill-upload input').click()} else {this.quill.format('image', false);}}}}}}}}
}

但是这里问题就出现了,当你用element-ui upload方法上传时你会发现上传不成功,emmmm~你会发现上传时Request Method 方式为OPTIONS,这跟平时的提交方式不一样,Status Code等于204,,去网上又查阅了下,发现这种请求方式,但是最终还是没有解决掉,好像是需要后端也要相应的改下东西

所以走到这里只能用另外一种方式去实现相同的功能了————Ueditor

第一步:先按照官方的提示 去官网下载相应的代码,我这里后端语言是PHP所以我下的是PHP的版本,根据需求去下载

第二步:ueditor里除了php文件都放到static文件,这是我的目录结构

第三步:将PHP文件放到后端去,我这边项目是我直接放到ftp上面去的,结构如下

第四步:我这边封装成了一个公共组件,因为有很多页面需要用到
<template>
<div><script id="editor" type="text/plain"></script>
</div>
</template><script>
//import AppConfig from '@/config'
import '../../../static/ueditor/ueditor.config.js'
import '../../../static/ueditor/ueditor.all.js'
import '../../../static/ueditor/lang/zh-cn/zh-cn.js'export default {name: "UEditor",
props: {id: {type: String},config: {type: Object},defaultMsg: {type: String},
},
created() {//this.$emit('defaultMsgVlaue', this.names)
},
data() {return {editor: null,names: ''}
},
mounted() {//初始化UEconst _this = this;this.initEditor()//this.editor = UE.getEditor(this.id, this.config);// this.editor.addListener('ready', () => {//     this.editor.setContent(_this.defaultMsg);// });
},
destoryed() {this.editor.destory();
},
methods: {getUEContent: function() {return this.editor.getContent();},initEditor() {let _this= this;this.editor = UE.getEditor('editor', this.config)//编辑器准备就绪后会触发该事件this.editor.addListener('ready',()=>{//设置可以编辑this.editor.setEnabled();this.editor.setContent(_this.defaultMsg);})//编辑器内容修改时this.selectionchange()},//编辑器内容修改时selectionchange() {this.editor.addListener('selectionchange', () => {//this.content = this.ue.getContent()})}
},
activated() {//初始化编辑器this.initEditor()
}
}
</script>

页面调用如下

<template>
<div id="app" class="hello"><el-button size="primary" type="info" icon="plus" @click="openWindow">打开窗口</el-button>
<el-dialog title="新增菜单" size="small" v-model="addFormVisible" :close-on-click-modal="false"><div><el-button size="primary" type="info" icon="plus" @click="getContent">获取内容</el-button><UEditor :config=config ref="ueditor" :defaultMsg=defaultMsg></UEditor></div>
</el-dialog>
</div>
</template><script>
import {UEditor} from './ueditor/index.js'export default{name: 'hello',components: {UEditor},data(){return {config: {/*//可以在此处定义工具栏的内容toolbars: [['fullscreen', 'source','|', 'undo', 'redo','|','bold', 'italic', 'underline', 'fontborder', 'strikethrough','|','superscript','subscript','|', 'forecolor', 'backcolor','|', 'removeformat','|', 'insertorderedlist', 'insertunorderedlist','|','selectall', 'cleardoc','fontfamily','fontsize','justifyleft','justifyright','justifycenter','justifyjustify','|','link','unlink']],*/autoHeightEnabled: false,autoFloatEnabled: true,  //是否工具栏可浮动initialContent:'请输入内容',   //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子autoClearinitialContent:true, //是否自动清除编辑器初始内容,注意:如果focus属性设置为true,这个也为真,那么编辑器一上来就会触发导致初始化的内容看不到了initialFrameWidth: null,initialFrameHeight: 450,BaseUrl: '',UEDITOR_HOME_URL: 'static/ueditor/'},addFormVisible: false}},methods: {openWindow: function(){this.addFormVisible = true;},//获取文档内容getContent: function(){let content = this.$refs.ueditor.getUEContent();console.log(content);alert(content);}}
}</script>
注意:在这里封装成一个公共组件了,但是在使用的过程中会发现,在同一页面回显数据到ueditor时只会渲染一次,这可怎么办呢,
这里想到了用watch来监听,然后再将数据放到ueditor里,这里我用的参数名是defaultMsg,代码如下:
watch: {'defaultMsg': {handler(newValue, oldValue) {//父组件param对象改变会触发此函数this.editor.setContent(newValue);},deep: true}
}
这样的话再同一个页面回显ueditor时就会实时改变,做到这里我想着试下在其他页面是否可以,因为有多个路由页面需要用到ueditor,当我在其他页面打开ueditor时,发现ueditor加载不出来了,然后我就纳闷了,然后排查了很多问题之后,终于知道是因为每次只初始化了ueditor,但是在关闭页面时没有将其销毁,所以需要在上面封装的公共组件里去销毁下
destroyed() {//销毁编辑器实例,使用textarea代替this.editor.destroy()//重置编辑器,可用来做多个tab使用同一个编辑器实例//如果要使用同一个实例,请注释destroy()方法// this.ue.reset()
}
这样的话就解决了在多个路由页面的时候ueditor不现实的问题。
第五步:配置文件上传和回显,我们需要在上传图片,并且让上传的图片回显到ueditor里,首先先将文件ueditor/ueditor.config.js里的serverUrl换成自己项目的服务器路径

这里配置之后就可以直接使用了

遇到的其他问题如下:前端代码必须跟PHP文件放在同一个域名上,我之前是将两块代码分别放到不同FTP上,这样导致ueditor里文件可以上传但是提示上传失败,这样上传的图片没法回显
有些还是不清楚的,或者有其他更好实现效果的方法的伙伴可以跟我留言,欢迎共同进步

vue+element-ui+富文本————图片上传相关推荐

  1. zx-quill+vue+element实现富文本图片上传到服务器

    quill富文本编辑器图片默认是base64数据流,我们要实现把图片上传到服务器这个需求,quill中并没有找到相关配置 https://www.jianshu.com/p/9e4e4d955d0f ...

  2. elementui图片上传php,vue+element-ui+富文本————图片上传

    最近用vue+element-ui开发一套后台管理系统,其中项目中需要用到富文本编辑器,这里总结下开发过程中遇到的坑和使用方法. 刚开始用的是vue-quill-editor结合element-ui上 ...

  3. Vue Element UI 之富文本图片上传服务器 + 图片地址插入富文本

    该案例的情况 vue版本:vue cli3 插件:vue-quill-editor vue-quill-editor的增强模块:quill-image-extend-module quill-imag ...

  4. springboot+vue+element+七牛云+实现图片上传功能

    注册七牛云 链接地址: https://www.qiniu.com/products/kodo,免费有10G空间与免费一个月的域名地址注册后,开启对象存储,创建空间选择地区, 上传方式: 1:前端现将 ...

  5. Quill富文本 图片上传服务器、复制粘贴图片上传

    引入: import { ImageExtend, QuillWatch } from "quill-image-extend-module"; Quill.register(&q ...

  6. summernote 图片上传 php,summernote富文本图片上传方法重写

    网上很多关于summernote 图片上传 重写的方法,就是因为有很多,所有有一些乱的,或者说比较复杂的.今天我写的这个,非常的简单,从js,到后台 处理的方法,都有.希望能给需要的人一些帮助 js代 ...

  7. vue-quill-editor + element-ui upload实现富文本图片上传

    代码贴上 <template><divclass="quill-editor-example"><divclass="box"&g ...

  8. element ui 富文本编辑器

    安装 cnpm install vue-quill-editor -s<el-form-item label="推送内容"> <!-- <el-input ...

  9. element ui富文本编辑器的使用(quill-editor)

    element ui富文本编辑器的使用(quill-editor) 文章目录 element ui富文本编辑器的使用(quill-editor) 效果展示:(可以上传图片及其视频) 第一步.首先安装富 ...

最新文章

  1. 人人FED CSS编码规范
  2. ansible基本操作
  3. python 闭包(closure)
  4. Spring AOP两种实现机制是什么?
  5. 薪资是跳出来的,不是涨出来的!
  6. 蓝桥杯 BASIC-5 基础练习 查找整数
  7. 机器学习实战之Logistic回归
  8. 第十五章 第十五章 异步A3C(Asynchronous Advantage Actor-Critic,A3C)-强化学习理论学习与代码实现(强化学习导论第二版)
  9. 拓端tecdat|R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题
  10. HTML5+js+css3开心消消乐手机pc端通用源码|H5小游戏
  11. 目前国内最热门的四款远程桌面控制软件
  12. python读文件的方法open,file,with open
  13. ITIL 4 Foundation-指导原则
  14. oracle 12.2R2 安装GI跑root.sh遇到CLSRSC-400
  15. linux下ad键盘驱动,led、键盘、ADC驱动程序
  16. vue动态设置路由重定向
  17. 2020云米5G战略新品发布,超越时代探索“互联未来•互动家”
  18. U盘无法格式化的几个解决方法
  19. 互联网晚报 | 4月21日 星期四 | A股三大指数集体跌超2%;以岭药业已成功注册多个连花商标;天津市房协召集多家房企开会...
  20. 记录yolov5更改backbone为ShuffleBlock网络迁移训练出错问题以及解决方法

热门文章

  1. 一篇dbus移植的点点滴滴
  2. 达梦数据库数据守护集群搭建(命令行方式)
  3. 男士穿衣七大禁忌,千万要避免
  4. 《R语言数据挖掘》读书笔记:一、预备知识
  5. 程序员掉发算工伤?程序员的你应该如何防止Tu头?
  6. Nginx内容过滤器-subs_filter
  7. WebGL 与 WebGPU比对[4] - Uniform
  8. 费马大定理以及奇偶数列法则
  9. 申请高新技术企业认定的规划及策略
  10. php 砸金蛋抽奖,jQuery抽奖砸金蛋代码