Lorenzo
Lorenzo
  • 发布:2020-07-31 09:43
  • 更新:2020-07-31 17:41
  • 阅读:904

#插件讨论# 【 QS-Masonry 瀑布流组件 - 取舍 】列表出现空白

分类:uni-app

非常好的插件,首先十分感谢作者,但是使用的时候我发现了一些问题。
第一个问题,我在运行示例项目的时候,点击“增加列数”,列表会消失,必须再点击“添加”增加数据才能再显示出列表,后续再点击“增加列数”会直接动态显示变化,不会再消失。

另一个问题,在我的项目里使用时,如果将列表清空重新插入数据给组件用setData赋值,列表也会变空白。但是很奇怪,第一次setData就不会。
我实际的操作就是改变listQuery中的参数,并且将page置为1,然后调用getList()这个方法,请求完数据后重新覆盖列表内容,列表就会空白,但是如果是新增数据就不会,以下是我的完整代码。list中的数据结构已经在对应的QS-Masonry-Template-Def.vue中修改,控制台无任何报错。

        getList() {  
            uni.showLoading({  
                title: '加载中'  
            });  
            let that = this;  
            that.$http  
                .get('/post/list/activity', { params: that.listQuery })  
                .then(res => {  
                    const list = res.data.data.list;  
                    if (that.listQuery.page == 1) {  
                        that.listData.list = []; //如果是第一页需手动置空列表  
                    }  
                    that.listData.list = that.listData.list.concat(list); //追加新数据  
                    that.listData.total = res.data.data.total;  
                    const _list = that.listData.list;  
                    that.$refs.QSMasonry.setData(that.listData.list);  
                    setTimeout(function() {  
                        that.getTopHeight();  
                        uni.hideLoading();  
                    }, 500);  
                })  
                .catch(err => {  
                    console.log(err);  
                    if (err.data && err.data.msg) {  
                        uni.showToast({ title: err.data.msg, icon: 'none' });  
                    }  
                });  
        }

最初通过查询源码发现是在QS-Masonry.vue的getListInfo(list, currentCount)中

ref.setHideList([...list], () => {  
    ...  
}

setHideList这里卡住,进一步查看是QS-Masonry-Template.vue的setHideList(arr, cb),但是我通过日志调试没发现具体问题出现在哪,刚入门uniapp不久,排错的过程可能不够优秀,麻烦作者大大能帮忙看看。

当列表出现空白时,只输出了第一句“getListInfo try”,正常情况下会按顺序全部输出

2020-07-31 09:43 负责人:无 分享
已邀请:
取舍

取舍 - 我们都如流星短暂 但谁能像它闪耀

第一个问题 我这边不能复现, 请问是哪个端什么手机?
第二个问题, 是 setHideList 方法 第二个参数 回调函数没有执行, 可以在 QS-Masonry-Template.vue 追踪调试一下看看 cb 为什么没有执行

Lorenzo

Lorenzo (作者) - 哈哈

@取舍
感谢取舍大大的回复。
1、我是下载了示例项目后在本地运行通过浏览器调试发现的。(Chrome 83.0.4103.106 (Official Build) (64-bit)以及QQ浏览器10.6.1(4208))我这边录制了问题的情况,麻烦您看一下。

2、我通过日志的方法在setHideList里查看,但是在列表正常与不正常的时候,都同样的输出了所有日志,我不知道为什么cb会没有执行,同样我也录了个屏,麻烦您看一下。
页面加载完成默认在“最热”,并且请求后台数据,此时瀑布流正常,当我第一次切换到“最新”时,列表就不见了,我切换回“最热”,再切换回“最新”,又会正常显示出来。同样都是在点击时修改listQuery中的参数后调用我代码中getList方法。

  • 取舍

    嗯, 第一个问题 H5 可以复现, 我会看你看, 第二个问题 可能需要你的示例工程

    2020-07-31 15:29

  • Lorenzo (作者)

    回复 取舍: 大大您好,示例工程我通过私信发送地址给您,谢谢

    2020-07-31 16:19

取舍

取舍 - 我们都如流星短暂 但谁能像它闪耀

第一个问题已修复, 已更新插件市场,
至于第二个问题, 我看了你的示例项目后, 你因为你列表的第二项 图片路径可能是空, 没有触发image组件的加载, 所以这种情况需要 你手动emit imgLoaded事件, 也就是说,你列表有10个,但是有一个一直没有触发imageLoaded事件, 所以 promise一直在等待状态没有回调, 以后考虑 单个item图片加载后直接增加在列表, 可以避免白屏的尴尬,但是如果不emit事件,是不会触发回调的, 除非加个定时器来判断几秒内有无加载, 但是这样就比较麻烦一些

  • Lorenzo (作者)

    好的,明白了,非常感谢!

    2020-07-31 19:31

该问题目前已经被锁定, 无法添加新回复