vue-quill-editor 自定义工具栏和自定义图片上传路径操作


Posted in Javascript onAugust 03, 2020

背景:

1.某些场景下vue-quill-editor默认的工具栏部分功能不希望出现,需要删除部分功能。

2.vue-quill-editor默认提供的图片上传方案是将图片转成base64存放到内容区,这会导致content字符长度太长,不一定可以传到后台保存(其实即使可以保存也不推荐这种方案)。所以我们需要将方案修改为将图片上传到服务器,然后通过URL的 方式访问到图片回显及使用。

vue-quill-editor工具栏改造及自定义图片上传(这里使用的是element-ui的上传组件):

引入插件(vue引入vue-quill-editor自行问度娘)

vue html

<el-upload class="avatar-uploader quill-img" name="file" 
:action="uploadImgUrl" 
:show-file-list="false" 
:headers="uploadHeaders" 
:on-success="quillImgSuccess" 
:before-upload="quillImgBefore" 
accept='.jpg,.jpeg,.png,.gif'>
</el-upload>
 
<quill-editor ref="myTextEditor" 
v-model="yearReviewForm.workCompletion" 
:options="editorOption">
</quill-editor>
vue js 

editorOption: {
  placeholder: 'Please enter it here...',
  modules:{
    toolbar:{
   container: [
    ['bold', 'italic', 'underline', 'strike'],// 加粗,斜体,下划线,删除线
  ['blockquote'],// 引用
  [{ 'header': 1 }, { 'header': 2 }],// 标题,键值对的形式;1、2表示字体大小
  [{ 'list': 'ordered'}, { 'list': 'bullet' }],//列表
  [{ 'indent': '-1'}, { 'indent': '+1' }],// 缩进
  [{ 'direction': 'rtl' }],// 文本方向
  [{ 'size': ['small', false, 'large', 'huge'] }],// 字体大小
  [{ 'header': [1, 2, 3, 4, 5, 6, false] }],//几级标题
  [{ 'color': [] }, { 'background': [] }],// 字体颜色,字体背景颜色
  [{ 'font': [] }],//字体
  [{ 'align': [] }],//对齐方式
  ['clean'],//清除字体样式
  ['image']//上传图片、上传视频
  ],
  handlers: {
  'image': function(val){
    if(val){
      document.querySelector('.quill-img input').click()
    }else{
     this.quill.format('image', false);
    }
    }
   }
   }
  }
}

自定义上传回显

// 富文本编辑框图片上传
 quillImgSuccess(res, file) {
  // 获取富文本组件实例
  let quill = this.$refs.myTextEditor.quill;
  // 如果上传成功
  if (res.code == '00001') {
  // 获取光标所在位置
  let length = quill.getSelection().index;
  // 插入图片 res.data为服务器返回的图片地址
  quill.insertEmbed(length, 'image', '/static-resource/' + res.body);// 这里的url是图片的访问路径不是真实物理路径
  // 调整光标到最后
  quill.setSelection(length + 1)
  } else {
  this.$message.error('图片插入失败')
  }
 }

校验图片格式

quillImgBefore(file){
  let fileType = file.type;
  if(fileType === 'image/jpeg' || fileType === 'image/png'){
  return true;
  }else {
  this.$message.error('请插入图片类型文件(jpg/jpeg/png)');
  return false;
  }
 },

至此大功告成。这里面只记录了关键步骤,不清楚的地方评论吧

!!!!注意:

在自定义上传图片的改造过程中如果存在多个富文本框同时存在一个页面时需要保证每个富文本及对应的upload的ref不一样

补充知识:在Vue项目使用quill-editor带样式编辑器(更改插入图片和视频) 运用vue-quilt-editor编写富文本编辑器 自定义图片路径 获取后台返回路径

一、首先在main.js 引入 vue-quilt-editor

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-quilt-editor样式 否则样式会乱码

二、导入依赖

npm install vue-quilt-editor save

三、使用组件

1.code

<el-col :span="24" class="warp-main" >
<el-form-item >
<div class="edit_container">
<quill-editor v-model="mate.mateFormerHeader.values[object['description'].name]"
ref="myQuillEditor"
class="editer"
:headers="headers"
:options="editorOption" @ready="onEditorReady($event)">
</quill-editor>
<el-upload class="upload-demo" :action="qnLocation" :before-upload='beforeUploadDetial' :data="uploadData" :on-success='upScuccess'
:headers="headers" ref="upload" >
<el-button size="small" type="primary" id="imgInput" style="display:none">点击上传</el-button>
</el-upload>
</div>
</el-form-item>
 </el-col>

绑定v-model 添加方法 这里使用隐形的上传按钮 来自定义自己的路径 headers 绑定图片上传的token 否则会报401

headers: {
'Authorization': 'Bearer ' + JSON.parse(window.sessionStorage.getItem('token')),
'Accept': 'application/json',
'X-TenantId': JSON.parse(window.sessionStorage.getItem('user')).tenantId
},

2.js

import { quillEditor } from 'vue-quill-editor' // 调用编辑器

在挂载时为图片上传按钮绑定事件

mounted () {
// 为图片ICON绑定事件 getModule 为编辑器的内部属性
this.$refs.myQuillEditor.quill.getModule('toolbar').addHandler('image', this.imgHandler)
},

onEditorReady () {
},
// 点击图片按钮会立即调用隐形按钮的上传

imgHandler (state) {

this.addRange = this.$refs.myQuillEditor.quill.getSelection()
if (state) {
const fileInput = document.getElementById('imgInput')
fileInput.click() // 加一个触发事件
}
this.uploadType = 'image'
},
beforeUploadDetial (file) {
// 图片上传之前调取的函数
console.log(file)
return this.qnUpload(file)
},
qnUpload (file) {
this.fullscreenLoading = true
const suffix = file.name.split('.')
const ext = suffix.splice(suffix.length - 1, 1)[0]
console.log(this.uploadType)
if (this.uploadType === 'image') { // 如果是点击插入图片
this.uploadData = {
key: `image/${suffix.join('.')}_${new Date().getTime()}.${ext}`
}
}
},
upScuccess (e, file, fileList) {
console.log(e)
this.fullscreenLoading = false
const vm = this
let url = ''
if (this.uploadType === 'image') { // 获得文件上传后的URL地址
url = 访问路径 + e
}
if (url != null && url.length > 0) { // 将文件上传后的URL地址插入到编辑器文本中
let value = url
vm.addRange = vm.$refs.myQuillEditor.quill.getSelection()
value = value.indexOf('http') !== -1 ? value : 'http:' + value
vm.$refs.myQuillEditor.quill.insertEmbed(vm.addRange !== null ? vm.addRange.index : 0, vm.uploadType, value, 'image') // 调用编辑器的 insertEmbed 方法,插入URL
}
this.$refs['upload'].clearFiles() // 插入成功后清除input的内容
},

以上这篇vue-quill-editor 自定义工具栏和自定义图片上传路径操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Stop SQL Server
Jun 21 Javascript
jQuery 版元素拖拽原型代码
Apr 25 Javascript
JQuery1.6 使用方法三
Nov 23 Javascript
Internet Explorer 11 浏览器介绍:别叫我IE
Sep 28 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
微信小程序“摇一摇”的实例代码
Jul 20 Javascript
Angularjs单选框相关的示例代码
Aug 17 Javascript
JS和Canvas实现图片的预览压缩和上传功能
Mar 30 Javascript
webpack4简单入门实例
Sep 06 Javascript
微信小程序实现上传多个文件 超过10个
Mar 30 Javascript
Python版实现微信公众号扫码登陆
May 28 Javascript
小程序组件传值和引入sass的方法(使用vant Weapp组件库)
Nov 24 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
Aug 03 #Javascript
Vue 实现对quill-editor组件中的工具栏添加title
Aug 03 #Javascript
简单了解three.js 着色器材质
Aug 03 #Javascript
Element InputNumber 计数器的实现示例
Aug 03 #Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 #Javascript
Vue 根据条件判断van-tab的显示方式
Aug 03 #Javascript
在vue中使用el-tab-pane v-show/v-if无效的解决
Aug 03 #Javascript
You might like
PHP的面试题集,附我的答案和分析(一)
2006/11/19 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
syntaxhighlighter 使用方法
2007/07/02 Javascript
一组JS创建和操作表格的函数集合
2009/05/07 Javascript
javascript 显示当前系统时间代码
2009/12/28 Javascript
JavaScript 页面编码与浏览器类型判断代码
2010/06/03 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
jquery插件bxslider用法实例分析
2015/04/16 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
Angular中ng-options下拉数据默认值的设定方法
2017/06/21 Javascript
详解require.js配置路径的用法和css的引入
2017/09/06 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
redis数据库及与python交互用法简单示例
2019/11/01 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
高中运动会入场词
2014/02/14 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
少先队活动总结
2014/08/29 职场文书
2014大学校园光棍节活动策划书
2014/09/29 职场文书
教师作风整顿个人剖析材料
2014/10/10 职场文书
银行员工考核评语
2014/12/31 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python