uni-app上拉加载更多 --下拉刷新

本文介绍了如何在uni-app中启用下拉刷新和上拉加载更多功能。首先在pages.json中设置首页的下拉刷新,然后引入uni-load-more组件并全局注册。接着定义请求函数getnewsList,并使用onPullDownRefresh监听下拉刷新事件。在methods中编写上拉加载和下拉刷新的具体代码,使用文章API获取数据。需要注意的是,由于this的作用域问题,需要在开始时定义全局变量 Self。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、开启下拉功
在目录pages.json文件中找到首页位置给它添加“enablePullDownRefresh”: true 完整代码如下

 
"path": "pages/index/index",
     "style": {
                "navigationBarTitleText": "首页",
                "backgroundColor": "#FFFFFF",
                "enablePullDownRefresh": true
          }

2、引入组件
我们在官方dome里找到components目录下uni-load-more文件,复制到我们项目中。且在首页中引入(在script标签下) 

//1引入组件 uni-load-more.vue

import uniLoadMore from '../../components/uni-load-more/uni-load-more.vue';

继续在下方去声明全局变量// 定义全局参数,控制数据加载var _self, page = 1,timer = null;
最后得export default中注册组件

components: {         //注册组件       

                          uniLoadMore

                    }, 

3、定义请求函数
件中的轮播图和卡片文章 多余部分代码大家直接忽视就好哈哈效果图 

loadingText: '加载中...',

        loadingType: 0, //定义加载方式 0---contentdown  1---contentrefresh 2--contentnomore

        contentText: {

        contentdown: '上拉显示更多',

        contentrefresh: '正在加载...',

        contentnomore: '没有更多数据了'

},

页面打开后我们直接定义请求一个getnewsList函数

onLoad: function() {

             this.TowerSwiper('swiperList');

             _self = this;

             //页面一加载时请求一次数据

             this.getnewsList();

          },

onPullDownRefresh监控下拉

onReachBottom: function() {

                        //触底的时候请求数据,即为上拉加载更多

                        //为了更加清楚的看到效果,添加了定时器

                    if (timer != null) {

                        clearTimeout(timer);

                    }

                    timer = setTimeout(function() {

                        _self.getmorenews();

                    }, 1000);

                    // 正常应为:

                   // _self.getmorenews();

              },

 

4、上拉 下拉代码块
文章API:https://www.frbkw.com/wp-json/wp/v2/posts
methods中编写上拉加载 

// 上拉加载

getmorenews: function() {

               if (_self.loadingType !== 0) {//loadingType!=0;直接返回

                                  return false;

                 }

                   _self.loadingType = 1;

                   uni.showNavigationBarLoading();//显示加载动画

                   uni.request({

                     url:'https://www.frbkw.com/wp-json/wp/v2/posts?page=' + page,

                     method: 'GET',

                     success: function(res) {

                          console.log(JSON.stringify(res));

                          if (res.data == null) {//没有数据

                               _self.loadingType = 2;

                               uni.hideNavigationBarLoading();//关闭加载动画

                              return;

                         }

                           page++;//每触底一次 page +1

                           _self.newsList = _self.newsList.concat(res.data);//将数据拼接在一起

                           _self.loadingType = 0;//将loadingType归0重置

                    uni.hideNavigationBarLoading();//关闭加载动画

                   }

                });

        },

 

 下拉刷新

// 下拉刷新

 getnewsList: function() {//第一次回去数据

              page = 1;

              this.loadingType = 0;

              uni.showNavigationBarLoading();

              uni.request({

                    url: 'https://www.frbkw.com/wp-json/wp/v2/posts?page=1',

                    method: 'GET',

                   success: function(res) {                                                

                    page++;//得到数据之后page+1

                    _self.newsList = res.data;

                          console.log(_self.newsList)

                    uni.hideNavigationBarLoading();

                    uni.stopPullDownRefresh();//得到数据后停止下拉刷新

               }

          });

},

 

5、总结
这个方式也是在uni-app基础视频中看到的。其中还有一个地方不是很好,因为在请求api返回数据中无法使用this,所以我们得在一开始去定义_self。主要还是因为写法的原因文章返回是 

success: function(res) {

        console.log(res.data);

}

如果是官方的

success: (res) => {

        console.log(res.data);

    }

 

### 实现上拉加载更多下拉刷新 #### 启用下拉刷新功能 为了启用页面的下拉刷新,在 `pages.json` 文件中的对应页面配置项内设置 `enablePullDownRefresh: true` 属性[^2]。 ```json { "path": "pages/index/index", "style": { "enablePullDownRefresh": true } } ``` #### 定义下拉刷新逻辑 在 Vue 组件中定义 `onPullDownRefresh()` 方法用于响应用户的下拉操作。当检测到用户执行了下拉动作,则触发此方法更新数据并最终通过调用 `uni.stopPullDownRefresh()` 来结束刷新状态[^3]。 ```javascript export default { methods: { onPullDownRefresh() { console.log('正在刷新...'); // 模拟网络请求延迟 setTimeout(() => { // 更新界面显示的数据... // 停止刷新动画 uni.stopPullDownRefresh(); }, 1000); } }, onLoad() { // 页面初次加载时启动一次刷新 uni.startPullDownRefresh(); }, onShow() { // 返回页面时可选择再次启动刷新 uni.startPullDownRefresh(); } } ``` #### 上拉加载更多的实现方式 对于上拉加载更多,通常是在列表底部添加一个组件来提示用户可以继续滚动以获取更多信息。每当用户接近屏幕底端时便自动发起新的 API 请求追加新项目至现有列表之中[^4]。 创建一个新的自定义组件 `components/uni-load-more/uni-load-more.vue`: ```html <template> <view class="load-more"> {{ loadingText }} </view> </template> <script> export default { props: ['loading'], computed: { loadingText() { switch (this.loading) { case 'more': return '点击或上拉加载更多'; case 'loading': return '努力加载中...'; case 'noMore': return '没有更多啦~'; default: return ''; } } } }; </script> <style scoped> .load-more { padding-top: 15px; padding-bottom: 15px; text-align: center; color: #9e9e9e; } </style> ``` 接着修改父级页面文件引入这个组件,并根据实际情况调整其属性值控制展示文案以及是否处于加载状态。 ```vue <template> <scroll-view scroll-y @scrolltolower="handleScrollToLower"> <!-- 列表内容 --> <!-- 加载指示器 --> <uni-load-more :loading="loadingStatus"></uni-load-more> </scroll-view> </template> <script> import UniLoadMore from '@/components/uni-load-more/uni-load-more'; export default { components: { UniLoadMore }, data() { return { listData: [], // 存储列表项目的数组 loadingStatus: 'more', // 控制加载更多组件的状态 pageIndex: 1 // 记录当前页码数,默认第一页 }; }, methods: { handleScrollToLower() { this.loadingStatus = 'loading'; // 设置为加载中 // 这里应该放置实际的异步加载业务逻辑 setTimeout(() => { const newData = Array.from({ length: 10 }).map((_, i) => ({ id: `${pageIndex}-${i}`, name: `Item ${pageIndex * 10 + i}` }) ); this.listData.push(...newData); if (/* 数据已全部加载完毕 */) { this.loadingStatus = 'noMore'; } else { ++this.pageIndex; // 翻页准备下次加载 this.loadingStatus = 'more';// 恢复等待状态 } }, 1000); // 模仿网络延时效果 } } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值