当前位置: 首页 > news >正文

【Uniapp】关于实现下拉刷新的三种方式

在小程序、h5等地方中,常常会用到下拉刷新这个功能,今天来讲解实现这个功能的三种方式:全局下拉刷新,组件局部下拉刷新,嵌套组件下拉刷新。

全局下拉刷新

这个方式简单,性能佳,最推荐,以下为步骤:

  • 配置pages.json(在需要该功能的页面设置对应属性)

{
    "pages": [
        {
            "path": "pages/index/index",
            "style": {
                "enablePullDownRefresh": true,
               // 下拉 loading 的样式,可选值为 'dark' 或 'light'
                "backgroundTextStyle": "dark"
            }
        }
    ]
}
  • 在页面中监听下拉刷新时间(使用onPullDownRefresh生命周期函数)

<template>
    <view>
        <!-- 页面内容 -->
    </view>
</template>

<script>
export default {
    onPullDownRefresh() {
        // 模拟异步请求数据
        setTimeout(() => {
            // 这里可以编写刷新数据的逻辑,比如重新请求接口获取最新数据
            console.log('下拉刷新完成');
            // 停止下拉刷新动画
            uni.stopPullDownRefresh();
        }, 2000);
    }
};
</script>

scroll-view 组件局部下拉刷新

  • scroll-view 组件中有自定义下拉刷新的属性以及相关方法可以直接使用,但是性能不如全局下拉刷新,且scroll-view 组件停止下拉刷新的方法可能有兼容问题,会使用不了,此时可以用refressher-triggered属性控制下拉刷新的状态。
  • 注意:scroll-view是区域滚动,不会触发页面滚动,无法触发pages.json配置的下拉刷新、页面触底onReachBottomDistance、titleNView的transparent透明渐变。

使用示例

<template>
    <scroll-view
        scroll-y
        refresher-enabled
        @refresherrefresh="onRefresh"
        @refresherrestore="onRestore"
        @refresherabort="onAbort"
    >
        <!-- 滚动内容 -->
        <view v-for="item in list" :key="item.id">{{ item.name }}</view>
    </scroll-view>
</template>

<script>
export default {
    data() {
        return {
            list: [
                { id: 1, name: 'Item 1' },
                { id: 2, name: 'Item 2' },
                { id: 3, name: 'Item 3' }
            ]
        };
    },
    methods: {
        onRefresh() {
            // 模拟异步请求数据
            setTimeout(() => {
                // 这里可以编写刷新数据的逻辑,比如重新请求接口获取最新数据
                console.log('局部下拉刷新完成');
                // 停止下拉刷新动画
                this.$refs.scrollViewRef.finishPullToRefresh();
            }, 2000);
        },
        onRestore() {
            console.log('下拉刷新被复位');
        },
        onAbort() {
            console.log('下拉刷新被中止');
        }
    }
};
</script>

嵌套组件中的下拉刷新

场景:需要在子组件触发下拉刷新功能,但是在pages.json中只能配置父页面的下拉刷新属性

  • 父组件配置全局下拉刷新

在page.json中为父页面配置enablePullDownRefresh为true,并在父组件的onPullDownRefresh生命周期函数中调用子组件的刷新方法。

<template>
    <view>
        <!-- 其他内容 -->
        <child-component ref="childRef"></child-component>
    </view>
</template>

<script>
import ChildComponent from './ChildComponent.vue';

export default {
    components: {
        ChildComponent
    },
    onPullDownRefresh() {
        console.log('父页面触发下拉刷新');
        // 调用子组件的刷新方法
        this.$refs.childRef.refreshData().then(() => {
            // 停止下拉刷新动画
            uni.stopPullDownRefresh();
        }).catch((error) => {
            console.error('刷新数据出错:', error);
            uni.stopPullDownRefresh();
        });
    }
};
</script>
  • 子组件定义刷新方法

<template>
    <!-- 子组件内容 -->
</template>

<script>
export default {
    methods: {
        async refreshData() {
            console.log('子组件开始刷新数据');
            // 这里编写刷新数据的逻辑,比如重新请求接口获取最新数据
            try {
                // 调用获取消息的方法
                await this.getData();
                console.log('子组件数据刷新完成');
            } catch (error) {
                console.error('子组件刷新数据出错:', error);
                throw error;
            }
        },
        // 其他方法...
    }
};
</script>

欢迎指正!

相关文章:

  • R18 XR L1 enhancement
  • 【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)
  • 【大语言模型】最新ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用
  • 【故障处理】- RMAN-06593: platform name ‘Linux x86 64-bitElapsed: 00:00:00.00‘
  • 【清晰教程】本地部署DeepSeek-r1模型
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统
  • 常用的python库-安装与使用
  • CTF-WEB: 利用Web消息造成DOM XSS
  • DeepSeek接口联调(postman版)
  • 使用pocketpal-ai在手机上搭建本地AI聊天环境
  • 使用spring-web 和 不是用spring-web各自的最小依赖
  • 3d pose 学习笔记2025
  • vscode无法ssh连接远程机器解决方案
  • 大模型chagpt原理(持续更新)
  • 新数据结构(4)——Java继承
  • springboot配置https
  • 【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知
  • 编码格式大全解释以及相关编码特性
  • Spring Boot整合DeepSeek实现AI对话(API调用和本地部署)
  • DeepSeek-R1技术革命:用强化学习重塑大语言模型的推理能力
  • 普京调整俄陆军高层人事任命
  • 杭州“放大招”支持足球发展:足球人才可评“高层次人才”
  • 生态环境保护督察工作条例对督察对象和内容作了哪些规定?有关负责人答问
  • 中美大幅下调超100%关税,印巴四日“战争”复盘|907编辑部
  • 普京:俄中关系是国家间关系的真正典范
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量