vue富文本 图片处理

vue富文本 图片处理template div el uploadclass avatar uploader2 action uploadImgUrl name file show file list false on success uploadSucces before upload beforeUpload el uploadclass avatar uploader2 action uploadImgUrl name file show file list false on success uploadSucces before upload beforeUpload div template

<template> <div> <el-upload class="avatar-uploader2" :action="uploadImgUrl" name="file" :show-file-list="false" :on-success="uploadSuccessEdit" :before-upload="beforeUploadEdit" > </el-upload> <div class="editor" ref="editor" :style="styles"></div> </div> </template> <script> import Quill from "quill"; import "quill/dist/quill.core.css"; import "quill/dist/quill.snow.css"; import "quill/dist/quill.bubble.css"; export default { 
    name: "Editor", props: { 
    /* 编辑器的内容 */ value: { 
    type: String, default: "", }, /* 高度 */ height: { 
    type: Number, default: null, }, /* 最小高度 */ minHeight: { 
    type: Number, default: null, }, }, data() { 
    return { 
    uploadImgUrl:process.env.VUE_APP_SECRET + "/api-file/files-anon", // uploadImgUrl: "http://10.0.0.197:9900" + "/api-file/files-anon", // 上传的图片服务器地址 editorOption: { 
    placeholder: "", theme: "snow", // or 'bubble' modules: { 
    toolbar: { 
    handlers: { 
    image: function (value) { 
    if (value) { 
    // 触发input框选择图片文件 document.querySelector(".avatar-uploader2 input").click(); } else { 
    this.quill.format("image", false); } }, }, }, }, }, Quill: null, currentValue: "", options: { 
    theme: "snow", bounds: document.body, debug: "warn", modules: { 
    // 工具栏配置 toolbar: [ ["bold", "italic", "underline", "strike"], // 加粗 斜体 下划线 删除线 ["blockquote", "code-block"], // 引用 代码块 [{ 
    list: "ordered" }, { 
    list: "bullet" }], // 有序、无序列表 [{ 
    indent: "-1" }, { 
    indent: "+1" }], // 缩进 [{ 
    size: ["small", false, "large", "huge"] }], // 字体大小 [{ 
    header: [1, 2, 3, 4, 5, 6, false] }], // 标题 [{ 
    color: [] }, { 
    background: [] }], // 字体颜色、字体背景颜色 [{ 
    align: [] }], // 对齐方式 ["clean"], // 清除文本格式 ["link", "image", "video"], // 链接、图片、视频 ], }, placeholder: "请输入内容", readOnly: false, }, }; }, computed: { 
    styles() { 
    let style = { 
   }; if (this.minHeight) { 
    style.minHeight = `${ 
     this.minHeight}px`; } if (this.height) { 
    style.height = `${ 
     this.height}px`; } return style; }, }, watch: { 
    value: { 
    handler(val) { 
    if (val !== this.currentValue) { 
    this.currentValue = val === null ? "" : val; if (this.Quill) { 
    this.Quill.pasteHTML(this.currentValue); } } }, immediate: true, }, }, mounted() { 
    this.init(); }, beforeDestroy() { 
    this.Quill = null; }, methods: { 
    // 上传图片前 beforeUploadEdit(res, file) { 
    // 显示loading动画 this.quillUpdateImg = true; }, // 上传图片成功 uploadSuccessEdit(res, file) { 
    // res为图片服务器返回的数据 // 获取富文本组件实例 let quill = this.$refs.myQuillEditor.quill; // 如果上传成功 if (res.code == 0) { 
    // 获取光标所在位置 let length = quill.getSelection().index; // 插入图片 res.data.url为服务器返回的图片地址 quill.insertEmbed(length, "image", res.data.url); console.log('----------------------'); console.log(res.data.url); // 调整光标到最后 quill.setSelection(length + 1); } else { 
    this.$message.error("图片插入失败"); } // loading动画消失 this.quillUpdateImg = false; }, init() { 
    const editor = this.$refs.editor; this.Quill = new Quill(editor, this.options); this.Quill.pasteHTML(this.currentValue); this.Quill.on("text-change", (delta, oldDelta, source) => { 
    const html = this.$refs.editor.children[0].innerHTML; const text = this.Quill.getText(); const quill = this.Quill; this.currentValue = html; this.$emit("input", html); this.$emit("on-change", { 
    html, text, quill }); }); this.Quill.on("text-change", (delta, oldDelta, source) => { 
    this.$emit("on-text-change", delta, oldDelta, source); }); this.Quill.on("selection-change", (range, oldRange, source) => { 
    this.$emit("on-selection-change", range, oldRange, source); }); this.Quill.on("editor-change", (eventName, ...args) => { 
    this.$emit("on-editor-change", eventName, ...args); }); }, }, }; </script> <style> .editor, .ql-toolbar { 
    white-space: pre-wrap !important; line-height: normal !important; } .quill-img { 
    display: none; } .ql-snow .ql-tooltip[data-mode="link"]::before { 
    content: "请输入链接地址:"; } .ql-snow .ql-tooltip.ql-editing a.ql-action::after { 
    border-right: 0px; content: "保存"; padding-right: 0px; } .ql-snow .ql-tooltip[data-mode="video"]::before { 
    content: "请输入视频地址:"; } .ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-item::before { 
    content: "14px"; } .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="small"]::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="small"]::before { 
    content: "10px"; } .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="large"]::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="large"]::before { 
    content: "18px"; } .ql-snow .ql-picker.ql-size .ql-picker-label[data-value="huge"]::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value="huge"]::before { 
    content: "32px"; } .ql-snow .ql-picker.ql-header .ql-picker-label::before, .ql-snow .ql-picker.ql-header .ql-picker-item::before { 
    content: "文本"; } .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]::before { 
    content: "标题1"; } .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]::before { 
    content: "标题2"; } .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]::before { 
    content: "标题3"; } .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]::before { 
    content: "标题4"; } .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]::before { 
    content: "标题5"; } .ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]::before { 
    content: "标题6"; } .ql-snow .ql-picker.ql-font .ql-picker-label::before, .ql-snow .ql-picker.ql-font .ql-picker-item::before { 
    content: "标准字体"; } .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="serif"]::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="serif"]::before { 
    content: "衬线字体"; } .ql-snow .ql-picker.ql-font .ql-picker-label[data-value="monospace"]::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-value="monospace"]::before { 
    content: "等宽字体"; } </style> 

使用的时候

<Editor v-model="formLabelAlign.information" :value="formLabelAlign.information"/> information 就是富文本内容 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224782.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午11:09
下一篇 2026年3月17日 上午11:09


相关推荐

  • php安装make出现“collect2:error:ldreturned1exitstatus

    php安装make出现“collect2:error:ldreturned1exitstatusphp安装make出现“collect2:error:ldreturned1exitstatus

    2022年4月24日
    128
  • 文心一言智能体怎么创建和使用 文心一言定制化AI助手详细教程

    文心一言智能体怎么创建和使用 文心一言定制化AI助手详细教程

    2026年3月12日
    3
  • HTML+CSS登陆界面实例

    HTML+CSS登陆界面实例登录界面截图项目代码仓库地址项目的代码放在了github的代码仓库当中:点我项目访问地址将登录界面项目部署在了github上面:点我项目代码解析项目的界面简析主要部分是Login的模块,包括username文本框和password文本框以及Login的按钮将Login模块进行居中,并且设置背景半透明添加背景框项目基本框架html代码解析大写的Login英文字母采用标题…

    2022年6月11日
    27
  • 详解频分复用和正交频分复用及matlab实现

    详解频分复用和正交频分复用及matlab实现说明 最近看着多径衰落突然看到了频分复用 于是想着顺便把频分复用 时分复用搞搞清楚算了 码分复用暂时没看 于是乎又翻出了我的红宝书 樊大佬的 通信原理 文中所说的课本均为该教材 书有多经典就不说了 还参考了几个博客大佬的博文 部分图来自于这些博客 这里主要是我自己的理解以及一些细节困惑的思考 是其他博客不会介绍的 顺便也用 Matlab 实现一下 还是自己亲自对着原理跑一跑程序更踏实一些 该

    2026年3月19日
    2
  • containsKey使用方法[通俗易懂]

    containsKey使用方法[通俗易懂]作用是判断Map中是否有所需要的键值,下面是具体的代码:

    2022年7月3日
    39
  • Linux之traceroute命令[通俗易懂]

    Linux之traceroute命令[通俗易懂]显示数据包到主机间的路径,traceroute命令用于追踪数据包在网络上的传输时的全部路径,它默认发送的数据包大小是40字节。通过traceroute我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。traceroute通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测.

    2022年6月20日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号