Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义


Posted in Javascript onAugust 20, 2019

本文为大家分享了Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义,供大家参考,具体内容如下

1.安装

npm install vue-quill-editor --save

2.在main.js中引入

import VueQuillEditor from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
 
Vue.use(VueQuillEditor);

3. template

<div>
 
  <!-- 图片上传组件辅助-->
  <el-upload
  class="avatar-uploader"
  :action="serverUrl"
  name="img"
  :headers="header"
  :show-file-list="false"
  :on-success="uploadSuccess"
  :on-error="uploadError"
  :before-upload="beforeUpload">
  </el-upload>
  <quill-editor
  v-model="content"
  ref="myQuillEditor"
  :options="editorOption"
  @change="onEditorChange($event)"
  >
  </quill-editor>
 </div>

4.js

<script>
 const toolbarOptions = [
 ['bold', 'italic', 'underline', 'strike'],  // toggled buttons
 [{'header': 1}, {'header': 2}],    // custom button values
 [{'list': 'ordered'}, {'list': 'bullet'}],
 [{'indent': '-1'}, {'indent': '+1'}],   // outdent/indent
 [{'direction': 'rtl'}],       // text direction
 [{'size': ['small', false, 'large', 'huge']}], // custom dropdown
 [{'header': [1, 2, 3, 4, 5, 6, false]}],
 [{'color': []}, {'background': []}],   // dropdown with defaults from theme
 [{'font': []}],
 [{'align': []}],
 ['link', 'image'],
 ['clean']
 
 ]
 export default {
 data() {
  return {
  quillUpdateImg: false, // 根据图片上传状态来确定是否显示loading动画,刚开始是false,不显示
  content: null,
  editorOption: {
   placeholder: '',
   theme: 'snow', // or 'bubble'
   modules: {
   toolbar: {
    container: toolbarOptions,
    handlers: {
    'image': function (value) {
     if (value) {
     // 触发input框选择图片文件
     document.querySelector('.avatar-uploader input').click()
     } else {
     this.quill.format('image', false);
     }
    }
    }
   }
   }
  },
  serverUrl: '/manager/common/imgUpload', // 这里写你要上传的图片服务器地址
  header: {
   // token: sessionStorage.token
  } // 有的图片服务器要求请求头需要有token
  }
 },
 methods: {
  onEditorChange({editor, html, text}) {//内容改变事件
  console.log("---内容改变事件---")
  this.content = html
  console.log(html)
  },
  // 富文本图片上传前
  beforeUpload() {
  // 显示loading动画
  this.quillUpdateImg = true
  },
 
  uploadSuccess(res, file) {
  // res为图片服务器返回的数据
  // 获取富文本组件实例
  console.log(res);
  let quill = this.$refs.myQuillEditor.quill
  // 如果上传成功
  if (res.code == 200 ) {
   // 获取光标所在位置
   let length = quill.getSelection().index;
   // 插入图片 res.url为服务器返回的图片地址
   quill.insertEmbed(length, 'image', res.url)
   // 调整光标到最后
   quill.setSelection(length + 1)
  } else {
   this.$message.error('图片插入失败')
  }
  // loading动画消失
  this.quillUpdateImg = false
  },
  // 富文本图片上传失败
  uploadError() {
  // loading动画消失
  this.quillUpdateImg = false
  this.$message.error('图片插入失败')
  }
 }
 }

注意:serverUrl :文件上传地址不能直接写全路径,会出现跨域问题报错。需要在conf/index.js 中 进行配置

module.exports = {
 dev: {
 // Paths
 assetsSubDirectory: 'static',
 assetsPublicPath: '/',
 host: 'localhost', // can be overwritten by process.env.HOST
 port: 8088, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
 autoOpenBrowser: true,
 cssSourceMap: true,
 proxyTable: {
  '/api': {
  target: 'http://localhost:18080/', //设置调用接口域名和端口号别忘了加http
  changeOrigin: true,
  pathRewrite: {
   '^/api': '/' //这里理解成用‘/api'代替target里面的地址,组件中我们调接口时直接用/api代替
   // 比如我要调用'http://0.0:300/user/add',直接写‘/api/user/add'即可 代理后地址栏显示/
  }
  },
  '/manager': {
  target: 'http://localhost:18081/',
  changeOrigin: true,
  pathRewrite: {
   '^/manager': '/'
  }
  }
 }
 
 },

5.style

<style>
 .ql-editor.ql-blank, .ql-editor {
 height: 350px;
 }
</style>

6.后台图片上传接口

@RequestMapping(value = "/imgUpload")
 public Map<String ,Object> imgUpload(HttpServletRequest req, MultipartHttpServletRequest multiReq)
   throws IOException {
  
  FileOutputStream fos = new FileOutputStream(
    new File("E://fileupload//upload.jpg"));
  FileInputStream fs = (FileInputStream) multiReq.getFile("img").getInputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  while ((len = fs.read(buffer)) != -1) {
   fos.write(buffer, 0, len);
  }
  fos.close();
  Map<String ,Object> map=new HashMap<>();
  map.put("code",200);
  map.put("msg","上传成功");
  map.put("url","http://localhost:8080/tomcat.png");
  return map;//这里只做返回值测试用,url 参数为图片上传后访问地址。具体根据功能进行修改}

7.效果如下

Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript接口实现代码 (Interfaces In JavaScript)
Jun 11 Javascript
javascript跨域的4种方法和原理详解
Apr 08 Javascript
浅析JQuery中的html(),text(),val()区别
Sep 01 Javascript
基于jquery实现ajax无刷新评论
Aug 19 Javascript
jQuery Easyui快速入门教程
Aug 21 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
require.js中的define函数详解
Jul 10 Javascript
angular $watch 一个变量的变化(实例讲解)
Aug 02 Javascript
JavaScript创建对象的七种方式全面总结
Aug 21 Javascript
JavaScript实现计算多边形质心的方法示例
Jan 31 Javascript
详解微信小程序用定时器实现倒计时效果
Apr 30 Javascript
vue+webpack dev本地调试全局样式引用失效的解决方案
Nov 12 Javascript
node中使用log4js4.x版本记录日志的方法
Aug 20 #Javascript
vue 获取视频时长的实例代码
Aug 20 #Javascript
vue+elementUI实现图片上传功能
Aug 20 #Javascript
vue+elementUi图片上传组件使用详解
Aug 20 #Javascript
vue集成chart.js的实现方法
Aug 20 #Javascript
微信小程序实现定位及到指定位置导航的示例代码
Aug 20 #Javascript
微信小程序使用车牌号输入法的示例代码
Aug 20 #Javascript
You might like
PHP递归算法的详细示例分析
2013/02/19 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
LazyLoad 延迟加载(按需加载)
2010/05/31 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
RequireJS 依赖关系的实例(推荐)
2017/01/21 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
Python中字符串的修改及传参详解
2016/11/30 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Django集成MongoDB实现过程解析
2020/12/01 Python
python 实现IP子网计算
2021/02/18 Python
Timex手表官网:美国运动休闲手表品牌
2017/01/28 全球购物
大学军训感言1000字
2014/02/25 职场文书
文明寝室申报材料
2014/05/12 职场文书
建设单位项目负责人任命书
2014/06/06 职场文书
2015年党员个人剖析材料
2014/12/18 职场文书
干部考察材料范文
2014/12/24 职场文书
2015年语文教研组工作总结
2015/05/23 职场文书
高三英语教学反思
2016/03/03 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
浅谈Nginx 中的两种限流方式
2021/03/31 Servers
python 如何在 Matplotlib 中绘制垂直线
2021/04/02 Python
Python Django项目和应用的创建详解
2021/11/27 Python