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

解决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

要回复文章请先登录注册

2***@qq.com

2***@qq.com

感谢感谢,为了这个问题我搞了一晚上了
2024-09-21 22:44
1***@qq.com

1***@qq.com

关闭刷新的时候可以套一层
this.$nextTick(() => {
this.triggered = false;
}) 。解决PDA设备数据获取太快,将两次的视图渲染合并成一次渲染造成下拉刷新无法正常恢复
2024-06-07 14:26
m***@163.com

m***@163.com

回复 环信 :
又不是不能用.jpg
2024-01-11 00:30
环信

环信

都2023年,还能有用户在依赖2020年的回答去师徒解决当前的问题,我只能说挺稳健的。
2023-08-10 09:51
1***@qq.com

1***@qq.com

回复 1***@qq.com :
麻了 编辑器能看 调试还是不行。。
2023-05-10 03:40
1***@qq.com

1***@qq.com

编辑器3.7 了 照着文档设置 没解决 scroll-view 加了个 v-if="true" 解决了 。。。
2023-05-10 03:39
水车

水车

Thank you so much!!!!!!!
2022-03-24 18:01
记得微笑

记得微笑

回复 1***@163.com :
这个是正解!
2021-09-27 09:04
xing3gg

xing3gg

更新hbuilder。。。
现在是好了。。。
目前版本 3.2.3.20210825
2021-09-15 16:25
8***@qq.com

8***@qq.com

回复 憨猴 :
hbuildx每次更新都是解决一些问题,并带来一些新问题。
所以是 bug改一送一?
2021-07-27 09:40