首页 > 编程语言 >uniapp+微信小程序+vue3 实现富文本编辑器遇到的坑

uniapp+微信小程序+vue3 实现富文本编辑器遇到的坑

时间:2023-06-08 17:23:44浏览次数:46  
标签:uniapp 文本编辑 const objectName 微信 promise data 图片

  问题一:富文本编辑器初始化实例出不来,有两个原因:

  1. 找的参考代码不适用微信小程序,需要用.in(this)
uni.createSelectorQuery()
          .in(this)
          .select("#editor")
          .context(res => {
              this.editorCtx = res?.context;
          }).exec()

 

2. 这里会用到大量的this和当前实例,然而script setup里面没有this,也拿不到当前实例。所以得改成选项式API   问题二:编辑器工具栏不显示 uniapp文档示例代码是不完整的,编辑器工具栏需要手动写代码实现,然后调EditorContext下的api来实现功能。比如,插入日期、插入图片、撤销、重做等,更基础的功能在EditorContent.format下   问题三:插入图片 官方示例代码没问题,问题在于上传服务器。 上传服务器时,如果需要formData binary这种数据,uniapp和微信小程序是拿不到的,它只能拿到base64和二进制流。而我的后端只能接受formData binary。原因大概是他用的那个图片上传框架系统oss。 解决办法: 网上找了好久,终于,找到一篇可用的,思路是,既然微信小程序不提供FormData构造函数,那就自己造轮子,当然这个轮子有网上的大神造好了,直接copy过来就行。 根据文章指引,创建new FormData()来获得formData binary格式的数据。就好了。   问题四:预览图片 预览图片的问题是因为后端用的那个oss系统,图片url不是固定的,可能会变,需要拿objectName(大意是文件名)去掉一个预览接口来获取最新的图片url地址。 解决办法: 插入图片分为2步:1. 选择图片uni.ChooseMedia,2.调用编辑器实例的insertImage方法插入 在1和2之间插入一步,如下: 在用户插入图片时,立即调上传接口拿到objectName(否则没有这个东西), 调insertImage时,作为data传入。它会被生成到img标签上的自定义属性里面。这一步备用。 预览时,用正则匹配img标签代码和objectName,调预览获取url的接口(它需要传objectName),拿到url,重新拼一个img标签返回。 这里又有个小坑,replace方法的第二个参数function里面直接异步的话返回的是一个promise,而不是想要的那种结果。 这时做两次replace,第一次收集promise,让它执行。 第二次直接用promise.all的结果来替换。 直接上代码:
    async getImgUrl(objectName) {
      const data = await request.getOssFile(objectName)
      return data.url;
    },

    async onView() {
      const viewHtml = this.editorHtml;
      const promises = [];
      const regImg = /(<img.*?\s.*?data-custom=\"objectName=(.*?)\">)/g
      viewHtml.replace(regImg, ($0, $1, $2) => {
        const promise = this.replaceImgAsync($2);
        promises.push(promise)
      })
      const data = await Promise.all(promises);
      this.viewHtml = viewHtml.replace(regImg, () => data.shift())
    },

    async replaceImgAsync(objectName) {
      const newUrl = await this.getImgUrl(objectName)
      return `<img src="${newUrl}" data-custom="objectName=${objectName}" />`
    }

 

       

标签:uniapp,文本编辑,const,objectName,微信,promise,data,图片
From: https://www.cnblogs.com/cathy1024/p/17467137.html

相关文章

  • zabbix--微信告警
    zabbix微信告警机制#zabbix告警机制有很多,比如邮件、微信、电话、短信等等。很多,但是像电话和短信都是有钱人玩的,我们这些穷屌丝玩玩微信邮件就可以了。参考:https://github.com/X-Mars/Zabbix-Alert-WeChat微信告警首先得注册一个企业微信,然后才能实现微信告警。注册地址:h......
  • uniapp打包所需的ios证书和证书profile文件获取的图文教程
    使用uniapp进行云打包,可以打包android和ios两种app,但是uniapp官方并不能凭空产生这两种平台所需的打包证书。那么这两种打包证书又是如何获取呢?android相对简单,使用jdk的工具生成就可以了,也可以使用香蕉云编来一键生成。但是ios证书的生成就没有这么简单,因为ios证书的生成需要......
  • 基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息
    //发起获得code值链接publicfunctiondoPageGetcode(){$appid='yourappid';//修改你的appidif(!$appid){return$this->result(10008,'参数错误','');}//这里的$redirect_uri地址需要http://,跳转对于登录doPageOpenid方法,在微信公众号上面也有添加这个域名http://w......
  • .Net:对接微信小程序进行授权操作
    原来的写法,使用node.js  其实就是小程序端访问接口,传来一个code参数,接下来后台拿到code之后可以根据code、appid、secret获取session_key和openid,拿到这两个之后后端的工作基本就结束了,可以参考官网接口迁移之后的写法,使用.Net,代码就怎么简单怎么来///<summary>......
  • 微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前
    文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言微信小程序开发笔记——导读大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码。但是,因为小程序用户的手机号码属于重要信息,为了安全,所以需要如下一系列较为复杂的方法和......
  • 微信小程序开发笔记 进阶篇⑥——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之后
    文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言微信小程序开发笔记——导读大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码。但是,因为小程序用户的手机号码属于重要信息,为了安全,所以需要如下一系列较为复杂的方法和......
  • 体验了【微信问一问】的新功能
    hello,伙伴们,我是索奇相信很多伙伴们已经体验了【微信问一问】的新功能但也有一些伙伴们还不知道如何开启使用,现在并不是所谓的仅内测可用(互联网上很多人说搜一搜都说是内测,一跟十,十跟百,不如自己探索验证一下,目前是否仅内测可用)两种方法开启问一问可以通过「问一问」种子用户招募进......
  • c#简单获取微信openid
    前端js:点击查看代码 varlocal=encodeURIComponent(window.location.href); varappid=$("#appId").text();//公众号 varurl='https://open.weixin.qq.com/connect/oauth2/authorize?appid='+appid+'&redirect_uri='+local+&......
  • Quill富文本编辑器(下)
    用自定义指令给vue-quill-editor添加一个全屏的功能1.自定义指令可分为全局定义和局部定义   1.1全局自定义指令以及引入方式1Vue.directive("maxWindow",{2bind(el,binding){3letmaxId=binding.value+"maxId";4letminId=binding.value+......
  • 使用Laf云平台,两步将ChatGPT接入微信公众号
    使用Laf云平台,两步将ChatGPT接入微信公众号最近很火的ChatGPT可以说已经满大街可见了,到处都有各种各样的体验地址,有收费的也有免费的,总之是五花八门、花里胡哨。所以呢,最近我就在研究怎么才能方便快捷的体验到ChatGPT的强大功能,其中一个就是:把ChatGPT接入公众号。如下图(成果图):......