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 相关文章推荐
总结AJAX相关JS代码片段和浏览器模型
Aug 15 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
jquery 模板的应用示例
Nov 12 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
Dec 13 Javascript
JavaScript中string对象
Jun 12 Javascript
JS中创建函数的三种方式及区别
Mar 13 Javascript
Angularjs结合Bootstrap制作的一个TODO List
Aug 18 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
May 29 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
Apr 13 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
详解Vue This$Store总结
Dec 17 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
Apr 08 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 翻页 实例代码
2009/08/07 PHP
《PHP编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
PHP 伪静态技术原理以及突破原理实现介绍
2013/07/12 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
2017/10/07 PHP
JS 常用校验函数
2009/03/26 Javascript
JavaScript中获取样式的原生方法小结
2014/10/08 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
js实现搜索栏效果
2018/11/16 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
超轻量级的js时间库miment使用解析
2019/08/02 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
python连接sql server乱码的解决方法
2013/01/28 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
Django中create和save方法的不同
2019/08/13 Python
python实现简易淘宝购物
2019/11/22 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
标准导师推荐信(医学类)
2013/10/28 职场文书
文明礼仪小标兵事迹
2014/01/12 职场文书
应届大学生简历中的自我评价
2014/01/15 职场文书
大学班长的职责
2014/01/27 职场文书
个人求职意向书
2015/05/11 职场文书
自荐信范文
2019/05/20 职场文书
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript