vue-quill-editor 富文本添加上传音频功能(编辑回显audio元素不展示修复)

前言:
公司一直使用vue-quill-editor。新的需求要求上传audio。

参考https://blog.csdn.net/halo1416/article/details/103955910
来实现上传发现一个问题。看到有同学在评论区提了。博主没有复现。。然后自己尝试解决了下。

step1
将原来handleSuccess方法里的注册逻辑单独拿出来

// customize/audio-blot.js
import { Quill } from 'vue-quill-editor';
const BlockEmbed = Quill.import('blots/block/embed');
class AudioBlot extends BlockEmbed {
  static create(value) {
    const node = super.create(value);
    node.setAttribute('src', value.url);
    node.setAttribute('controls', true);
    node.setAttribute('name', value.name);
    node.setAttribute('controlsList', 'nodownload');
    return node;
  }
  // 添加value获取当前的audio元素。拿到audio元素的属性。
  static value(domNode) {
    const value = {
      url: '',
      name: '',
    };
    // 这里要加判断。不然会显示undefined
    if (domNode.getAttribute('src')) {
      value.url = domNode.getAttribute('src');
      value.name = domNode.getAttribute('name');
    }
    return value;
  }
}
AudioBlot.blotName = 'audio';
AudioBlot.tagName = 'audio';
export default AudioBlot;

step2

import AudioBlot from './customize/audio-blot';
//注册audio
Quill.register(AudioBlot);

简单两步解决回显问题。

ps:

当audio处于富文本第一个位置时候会出现删除不掉的情况。
让audio处于第二个。在audio后面再添加一个元素可以解决。
没遇到的同学请忽略

const length = quill.getSelection().index;
quill.insertEmbed(
  length + 1,
  'audio',
  { url: file.url, name: file.name },
  'api',
);
quill.insertText(length + 2, '');
quill.setSelection(length + 2);
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值