【mavon-editor】内容回显,二次编辑图片无法展示到图片控制列表

在做个人博客的时候找了一些富文本编辑器来使用,虽然说有一些bug,但是用起来感觉很舒服,最后还是打算用mavon-editor。遇到比较麻烦的一个问题就是:如果内容中有图片的话,二次回现编辑的时候工具栏里的图片控制列表是无法实时同步的,这样就无法对已有图片进行删除。

在查看了插件代码后,发现可以用以下方式实现。

<mavon-editor ref=md class="mavonEditor" v-model="content" @imgAdd="imgAdd" @imgDel="imgDel" @save="saveMavonEditor"></mavon-editor>

1、首先要存储md格式(可以获取到两种格式的内容一种是md格式,一种html格式)

console.log('html格式',this.$refs.md.d_render)   
console.log('md格式',this.$refs.md.d_value)

![在这里插入图片描述](https://img-blog.csdnimg.cn/7c9636bd8f1540a488f36d28648e9682.png在这里插入图片描述

2、解析md格式中的图片名称和图片路径并取出,然后通过方法添加到图片控制列表

mounted() {
   //将解析到图片名字和地址添加到控制列表(具体为什么要填这些参数,是因为mavon-editor插件中要使用到这些内容)
   let  imgRecurrent =(name,url)=>{
      this.$refs.md.$refs.toolbar_left.$imgAddByFilename(
          //markdown模板图片地址
          url,
          {
            // 图片控制列表图片链接
            miniurl:url,
            // 图片控制列表名字
            name:name,
            //markdown模板图片名称
            _name:name
          }
      )
    }
    // 查找模板中已存在图片的名字和地址,返回的格式为[{text:'xxx',url: 'xxx.png'}]
    let findImg = (str)=>{
      const regex = /!\[(.*?)\]\((.*?)\)/g;
      const matches = [];
      let match;
      while ((match = regex.exec(str)) !== null) {
        const [, text, url] = match;
        matches.push({ text, url });
      }
      return  matches
    }
    //本人自己写的获取模板内容的接口,内容就在步骤一
    post_not_saved().then(res=>{
      this.title = res.data.title;
      this.content = res.data.content;
      let imgData = findImg(this.content);
      imgData.forEach(item=>{
        imgRecurrent(item.text,item.url)
      })
    })
  }

结果就是下图
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
首先,在前端使用 mavon-editor 上传图片,需要将图片转换为 base64 编码的字符串,然后将其作为参数传递给后端。可以通过 FileReader 对象实现图片转换为 base64 编码的字符串,代码如下: ```javascript // 选择图片并读取 let file = e.target.files[0] let reader = new FileReader() reader.readAsDataURL(file) reader.onload = () => { let imgBase64 = reader.result // 图片base64编码字符串 // 将base64编码字符串传递给后端 axios.post('/upload-image', { imgBase64 }).then(res => { // 处理回显 // ... }) } ``` 在后端使用 Express 接收图片,并将其写入服务器本地。可以使用 `fs` 模块的 `writeFile()` 方法实现文件写入,代码如下: ```javascript const fs = require('fs') app.post('/upload-image', (req, res) => { let imgBase64 = req.body.imgBase64 // 去除data:image/png;base64,前缀 let base64Data = imgBase64.replace(/^data:image\/\w+;base64,/, '') // 将base64编码转换为buffer对象 let imgBuffer = new Buffer.from(base64Data, 'base64') // 写入文件 let filename = Date.now() + '.png' // 设置文件名,避免重复 fs.writeFile(filename, imgBuffer, err => { if (err) { res.send({ code: 500, msg: '写入文件失败' }) } else { res.send({ code: 200, msg: '上传成功' }) } }) }) ``` 最后,在前端处理回显。可以使用 mavon-editor 的 `afterUpload` 回调函数,接收后端返回的图片地址,并将其插入到编辑器中,代码如下: ```javascript <template> <div> <mavon-editor v-model="content" @after-upload="afterUpload" ></mavon-editor> </div> </template> <script> export default { data() { return { content: '' // 编辑内容 } }, methods: { // 图片上传后回调 afterUpload(info) { if (info.code === 200) { let imgUrl = 'http://localhost:3000/' + info.filename // 图片地址 let str = `![${info.filename}](${imgUrl})` // Markdown图片语法 this.content += str // 将图片插入到编辑器中 } else { console.log(info.msg) } } } } </script> ``` 在上面的代码中,`afterUpload` 回调函数接收后端返回的信息,如果上传成功,则将图片地址和 Markdown 图片语法组合成字符串,插入到编辑器中进行回显。否则,输出错误信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

言只 石皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值