vue富文本框(插入文本、图片、视频)的使用及问题小结


Posted in Javascript onAugust 17, 2018

今天在vue里面插入富文本遇到了一些小坑在这里提供给大家用于参考,如有错误,望多加指正。

我这里使用的是Element-ui的上传图片组件

首先引入Element-ui(这个我就不作赘述了,详情参考element中文官网)

在引入富文本组件vue-quill-editor

使用在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);

现在就可以在vue中使用富文本

<template>
<!--富文本编辑器-->
  <el-form-item label="内容" :label-width="formLabelWidth">
   <quill-editor v-model="value" ref="myQuillEditor" :options="editorOption" @change="onEditorChange($event)">
   </quill-editor>
  </el-form-item>
</template>
<script>
export default {
 data() {
  return {
        value:'',
  editorOption: {
   placeholder: '请输入院校简介',
   theme: 'snow',
   modules: {}
  }
      },
    methods: {
      onEditorChange() {
  console.log(this.value)
  }
    }
}
</script>

这里需要注意的是editorOption是必须要配置的

其样式由于没有在modules配置工具拦所以它的出事显示就较为简洁

如果需要上传图片或者视频就需要对模块里面对工具栏进行改造重构(使用handlers)

modules: {
   toolbar: {
    handlers: {
                container: toolbarOptions, // 工具栏
    'image': function(value) {
     if(value) {
     alert(1)
     } else {
     this.quill.format('image', false);
     }
    },
    'video': function(value) {
     if(value) {
     alert(2)
     } else {
     this.quill.format('image', false);
     }
    },
    }
   }
   }

配置好了过后会发现整个富文本编辑器的工具栏没有改变,还是只保留了几个基本的富文本功能。

vue富文本框(插入文本、图片、视频)的使用及问题小结

这个是因为handlers是用来定义自定义程序的,而添加自定义处理程序就会覆盖它本省的工具栏和主体行为所以我们还要再自行配置下自己需要的工具栏,所有功能的配置如下,大家也可以按需配置

const toolbarOptions = [
 ['bold', 'italic', 'underline', 'strike'], // toggled buttons
 ['blockquote', 'code-block'],
 [{
  'header': 1
 }, {
  'header': 2
 }], // custom button values
 [{
  'list': 'ordered'
 }, {
  'list': 'bullet'
 }],
 [{
  'script': 'sub'
 }, {
  'script': 'super'
 }], // superscript/subscript
 [{
  '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', 'video'],
 ['clean'] // remove formatting button
 ]

此时的文本工具就会丰富了

vue富文本框(插入文本、图片、视频)的使用及问题小结

这样它的工具栏就会有上传图片和视频的接口,然后你就可以在工具拦的配置里的image和video里配置上传图片或视频,可以根据它的点击来给他相应的处理回应,也可以为其重新定向事件,这里我这里给大家介绍重新定向事件

首先定义一个上传组件,我这里用的是自己写好的上传 组件

<div class='avatar-uploader'>
 <myUp v-on:getImgUrl='AddInputUrl'></myUp>
</div>

设置好相应属性值和事件

<script>
import myUp from '@/page/test' //上传组件
  export default {
    data() {
      return { 
        value:'',          
        editorOption: {
   placeholder: '请输入院校简介',
   theme: 'snow', // or 'bubble'
   modules: {
   toolbar: {
    container: toolbarOptions, // 工具栏
    handlers: {
    'image': function(value){
     if(value) {
//     console.log(this.serverUrl)
     document.querySelector('.avatar-uploader').click()
//                alert(1)
     } else {
     this.quill.format('image', false);
     }
    },
    'video': function(value) {
     if(value) {
     alert(2)
     } else {
     this.quill.format('image', false);
     }
    },
    }
   }
   }
  }, 
      }
    },
    methods: {
      onEditorChange() {
  console.log(this.value)
  var conten = this.value
  this.$emit('getText',conten)
  }
    }
  }
</script>

这里需要注意的是如果想直接实现上传的话就需要在工具栏设置点击图片上传的时候用指针函数将this锁定再做其他操作

由于我是自己写的上传所以要插入到富文本内部所以添加内容的时候需要加入img标签,因为富文本内部是支持图片的解析的

AddInputUrl(data) {
  var a = data
  var tp = a.length
  var imghz = a.slice(tp - 4, tp)
  var src = 'src="' + a + '"'
  var bq = "<img " + src + " alt='' />"
  this.value += bq
}

做到这里一个支持上传图片的富文本就做好了,再来说下视频,由于引入的富文本绝大多数都是没有内置的播放器所以video标签在富文本里面会失效,在这里我就选择直接用iframe标签

var bq='<iframe frameborder="0" width="100%" height="40%" '+ src+' allowfullscreen></iframe>'
this.value += bq

总结

以上所述是小编给大家介绍的vue富文本框(插入文本、图片、视频)的使用及问题小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
基于JQuery的6个Tab选项卡插件
Sep 03 Javascript
纯js实现无限空间大小的本地存储
Jun 18 Javascript
javascript日期计算实例分析
Jun 29 Javascript
详解JS对象封装的常用方式
Dec 30 Javascript
node.js发送邮件email的方法详解
Jan 06 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
Jul 08 jQuery
angularjs 动态从后台获取下拉框的值方法
Aug 13 Javascript
基于axios 解决跨域cookie丢失的问题
Sep 26 Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
Nov 13 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
Mar 14 Javascript
Vue触发input选取文件点击事件操作
Aug 07 Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 #Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 #Javascript
JavaScript实现构造json数组的方法分析
Aug 17 #Javascript
layer弹出层父子页面事件相互调用方法
Aug 17 #Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 #Javascript
layer弹出层全屏及关闭方法
Aug 17 #Javascript
vue+iview+less 实现换肤功能
Aug 17 #Javascript
You might like
for循环连续求和、九九乘法表代码
2012/02/20 PHP
php 字符串中的\n换行符无效、不能换行的解决方法
2014/04/02 PHP
PHP使用strtotime计算两个给定日期之间天数的方法
2015/03/18 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
PHP+Ajax实现的博客文章添加类别功能示例
2018/03/29 PHP
Laravel源码解析之路由的使用和示例详解
2018/09/27 PHP
nginx 设置多个站跨域
2021/03/09 Servers
关于原生js中bind函数的简单实现
2016/08/10 Javascript
javascript正则表达式模糊匹配IP地址功能示例
2017/01/06 Javascript
微信小程序 登录实例详解
2017/01/16 Javascript
JavaScript面向对象精要(上部)
2017/09/12 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧不动,右侧滑动)
2019/01/23 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
Python中的localtime()方法使用详解
2015/05/22 Python
python Django模板的使用方法
2016/01/14 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
pytorch中的inference使用实例
2020/02/20 Python
德国电子商城:ComputerUniverse
2017/04/21 全球购物
怀旧收藏品和经典纪念品:Betty’s Attic
2018/08/29 全球购物
初级Java程序员面试题
2016/03/03 面试题
大学生毕业自我鉴定范文
2013/09/19 职场文书
大学毕业感言100字
2014/02/03 职场文书
基层干部2014全国两会学习心得体会
2014/03/10 职场文书
亚运会口号
2014/06/20 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
小学运动会报道稿
2014/10/04 职场文书
2014幼儿园小班工作总结
2014/11/10 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
广播体操比赛主持词
2015/06/29 职场文书
Nginx快速入门教程
2021/03/31 Servers
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
基于angular实现树形二级表格
2021/10/16 Javascript