赞
踩
npm install vue-quill-editor --save
npm install quill --save
我这里使用的上传图片为ant design的图片上传
<template> <div :class="prefixCls"> <!--files 为后端接收参数一样 --> <a-upload name="files" listType="picture-card" class="image-uploader" :showUploadList="false" :action="uploadUrl" :beforeUpload="beforeUpload" @change="handleUpload" > </a-upload> <a-spin tip="上传中..." :spinning="spinning"> <quill-editor v-model="content" ref="myQuillEditor" :options="editorOption" @blur="onEditorBlur($event)" @focus="onEditorFocus($event)" @ready="onEditorReady($event)" @change="onEditorChange($event)"> </quill-editor> </a-spin> </div> </template> <script> import 'quill/dist/quill.core.css' import 'quill/dist/quill.snow.css' import 'quill/dist/quill.bubble.css' import { quillEditor } from 'vue-quill-editor' import { uploadUrl } from '@/utils/request' // 工具栏配置 const toolbarOptions = [ ['bold', 'italic', 'underline', 'strike'], ['blockquote', 'code-block'], [{ 'header': 1 }, { 'header': 2 }], [{ 'list': 'ordered' }, { 'list': 'bullet' }], [{ 'script': 'sub' }, { 'script': 'super' }], [{ 'indent': '-1' }, { 'indent': '+1' }], [{ 'direction': 'rtl' }], [{ 'color': [] }, { 'background': [] }], [{ 'align': [] }], ['link', 'image', 'video'], ['clean'] ] export default { name: 'QuillEditor', components: { quillEditor }, props: { prefixCls: { type: String, default: 'ant-editor-quill' }, // 表单校验用字段 // eslint-disable-next-line value: { type: String } }, data () { return { content: null, editorOption: { modules: { toolbar: { container: toolbarOptions, //富文本的toolbar内容 handlers: { //用于监听图片上传,绑定图片 'image': function (value) { if (value) { document.querySelector('.image-uploader input').click() } else { this.quill.format('image', false) } } } } } }, uploadUrl: uploadUrl, spinning: false } }, methods: { //验证图片 beforeUpload (file) { const isImg = file.type === 'image/jpeg' || file.type === 'image/gif' || file.type === 'image/png' || file.type === 'image/bmp' if (!isImg) { this.$message.error('只能上传图片文件!') return false } const isLt3M = file.size / 1024 / 1024 < 3 if (!isLt3M) { this.$message.error('上传图片必须小于3MB!') return false } this.spinning = true return true }, //上传图片的回调函数 handleUpload (callback) { const response = callback.file.response if (response) { this.spinning = false const quill = this.$refs.myQuillEditor.quill if (response.status === 10000) { this.imageUrl = response.data[0] // 获取光标所在位置 const length = quill.getSelection().index // 插入图片 res.info为服务器返回的图片地址 quill.insertEmbed(length, 'image', this.imageUrl) // 调整光标到最后 quill.setSelection(length + 1) } else { this.$notification.error({ message: '上传失败', description: response.message }) } } }, onEditorBlur (quill) { // console.log('editor blur!', quill) }, onEditorFocus (quill) { // console.log('editor focus!', quill) }, onEditorReady (quill) { // console.log('editor ready!', quill) }, //修改富文本 onEditorChange ({ quill, html, text }) { //console.log('editor change!', quill, html, text) this.$emit('change', html) } }, //监听文本变化 watch: { value (val) { this.content = val } } } </script>
<template> <div> <vue-quill-editor :value="articleContent" ref="quillEditor" @change="onEditorChange" style="height: 400px" ></vue-quill-editor> </div> </template> <script> import VueQuillEditor from '@/components/QuillEditor' export default { components: { VueQuillEditor }, data() { return { articleContent: '', } }, methods: { onEditorChange(html) { this.articleContent = html }, }, } </script>
如果上传存在图片链接需要在移动端展示,比如(uniapp实现的微信小程序需要展示图片过宽),咱们可以这样简单的对图片进行处理;
//对文本文件中的图片进行处理,然后再进行模板编译(v-html)
articleContent= articleContent.replace(/<img/g,"<img style='max-width:100%;height:auto;'")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。