首页 / 大前端 / 小程序富文本编辑器Editor之setContents初始化富文本内容失败(报错)终极解决!!!

小程序富文本编辑器Editor之setContents初始化富文本内容失败(报错)终极解决!!!

2023-01-13 01:13 大前端 阅读 5504 来源 Delta

今天开发用uniapp要实现微信小程序富文本编辑以及初始化赋值的功能,在初始化赋值过程中发现失灵时不灵,经常报一个editorCtx.setContents is not a function的错误,给我差点整的郁闷了

去网上查了一下,发现从19年开始就有人在小程序论坛反馈了,官方回复说已经修复了,然而问题依然还在

最终还是自己扛下了所有,花了点时间解决了这个问题,下面上代码

// 设置富文本内容
            async editor_setContents(text = "

 

") {
                // 判断开局初始化是否成功
                if (this.editorCtx.setContents === undefined) {
                    // 开局初始化失败,执行重新初始化函数
                    this.initContent(text)
                } else {
                    // 开局初始化成功则进行赋值
                    this.editorCtx.setContents({
                        html: text
                    })
                }
            },
            // 重新初始化内容
            initContent(text) {
                // 友好提示
                uni.showLoading({
                    title: '正在加载'
                })
                // 设置定时器
                let load = setInterval(()=>{
                    // 重新执行初始化
                    uni.createSelectorQuery().in(this).select('#editor').context((res) => {
                        this.editorCtx = res.context
                    }).exec()
                    // 判断初始化是否成功
                    if (this.editorCtx.setContents !== undefined) {
                        // 初始化成功
                        
                        // 富文本赋值
                        this.editorCtx.setContents({
                            html: text //this.EditGoodsDetail.content为赋值内容。    
                        })
                        // 关闭提示
                        uni.hideLoading()
                        // 清除定时器
                        clearInterval(load)
                    }
                }
                ,1000)
            },

说下代码的原理,首先进行this.editorCtx.setContents的判断,看看是否加载成功,如果成功的话,则直接赋值富文本就可以了

 

如果返回结果是undefined,则代表没有初始化成功,这时我们让他跳到重新初始化的函数 initContent 中,在重新初始化函数中我们先进行一个loading提示,便于友好的展示,然后设置一个定时器进行富文本的再次初始化,初始化完成后加入判断,如果初始化成功就进行富文本赋值、关闭定时器、关闭加载中的提示;如果还没有加载成功,则让定时器继续运行,直至加载成功!!!

猜你喜欢