MartinYip
MartinYip
  • 发布:2020-04-16 11:20
  • 更新:2024-09-21 22:44
  • 阅读:18364

解决scroll-view下拉刷新无法正常恢复的问题

分类:uni-app
关于scroll-view组件的下拉刷新,无论是uni-app还是微信小程序,官方都说得不是很明白,有一个非常关键的关键规则没说清楚,组件属性例子:

refresher-triggered="triggered" @refresherrefresh="onRefresh" @refresherrestore="onRestore" scrolltolower="loadMore"

1.通过程序将triggered设为true时,将触发onRefresh;
2.不管triggered为何值,在界面中下拉,也会触发onRefresh,但不会自动改变triggered值(不能双向绑定,这是问题的根本原因);
3.onRefresh执行完毕,不会自动触发onRestore(这是问题的表现),使得刷新图标一直显示,必须是triggered由true变为false,才会触发onRestore并隐藏刷新图标;如果triggered一直为false,或一直为true,都不会触发。

解决办法:
1.在进入onRefresh后,如果triggered为false,则将它置为true,当执行完你的刷新操作(通常是获取新的数据)后,将triggered置为false
2.由于上一步中将triggered置为true,会再次触发onRefresh,故需再增加一个_freshing,表示是否正在执行刷新操作,在onRefresh中做判断,如_freshing为true,不执行刷新操作直接返回。

如果scroll-view有多个,要每个用自己的 triggered和refreshing来控制。

代码如下,和官方差不多,注意有关键的几个细节不同。

<script>  
    export default {  
        data() {  
            return {  
                triggered: false,  
                _freshing: false  
            }  
        },  
        onLoad() {  
            this._freshing = false;  
            setTimeout(() => {  
                this.triggered = true;//触发onRefresh来加载自己的数据,如果不用这种方式,不要在此改变triggered的值  
            }, 1000)  
        },  
        methods: {  
            onPulling(e) {  
                console.log("onpulling", e);  
            },  
            onRefresh() {  
                if (this._freshing) return;  
                this._freshing = true;  
                if (!this.triggered)//界面下拉触发,triggered可能不是true,要设为true  
                    this.triggered = true;  
                setTimeout(() => {  
                    this.triggered = false;//触发onRestore,并关闭刷新图标  
                    this._freshing = false;  
                }, 3000)  
            },  
            onRestore() {  
                console.log("onRestore");  
            },  
            onAbort() {  
                console.log("onAbort");  
            }  
        }  
    }  
</script>
19 关注 分享
m***@qq.com 1***@qq.com 4***@qq.com 是刘某人 1***@qq.com 1***@qq.com 1***@qq.com 2***@qq.com 1***@qq.com 以何为家 y***@126.com 1***@qq.com 1***@qq.com 1***@qq.com 2***@qq.com Meiwah w***@163.com xiaoxiaoka m***@163.com

要回复文章请先登录注册

[已删除]

[已删除]

回复 憨猴 :
谢谢谢谢谢谢 我靠 看了你的回复我才知道还有这问题 一直让我在看代码 唉 走弯路了
2021-07-26 11:55
l***@qq.com

l***@qq.com

大佬 triggered 是不是可以替代_freshing 做判断
2021-07-21 22:32
9***@qq.com

9***@qq.com

回复 1***@qq.com :
怎么解决的啊
2021-07-19 14:53
1***@qq.com

1***@qq.com

回复 憨猴 :
我擦,实测有效,大哥你怎么发现的?
2021-07-17 10:19
maozai

maozai

回复 1***@qq.com :
还没修复呢,App的
2021-07-16 16:26
憨猴

憨猴

如果遇到scroll-view只能下拉刷新一次的情况,请把hbuilder回退到老版本.
2021-07-15 11:47
5***@qq.com

5***@qq.com

回复 1***@qq.com :
我早上更新的新版本就出这个问题了,我上个星期五打的安装包都是正常的
2021-07-12 18:15
1***@qq.com

1***@qq.com

回复 1***@qq.com :
确实就是执行一次,下一次下拉 refresherrefresh 就不触发了
2021-07-11 22:08
以何为家

以何为家

学习了
2021-06-30 15:46
彭彭

彭彭

请问那个刷新样式可以改吗 比如那个圆圈我想改成黄色
2021-05-07 20:21