鸿蒙next 下拉刷新上来加载 来了 我不允许你不会

前言

各位同学大家好, 有段时间没有给大家更新文章了 ,最近在开发 鸿蒙next中 有用到这个下拉刷新和上来加载的功能就准备写个文章分享一下 那么废话不多说 我们正式开始:

效果图

准备工作:

找到我们DevEco studio 的安装位置

找到我们ohpm 的bin目录

配置在环境变了中

新建

把我们的路径粘贴到这里然后确定

最后在cmd 输入ohpm 出现如图画面就是配置成功

打开项目

输入如下命令

bash 复制代码
ohpm install @ohos/pulltorefresh

出现安装成功提示即可

代码具体实现

定义2个数组模拟数据

typescript 复制代码
@State  refreshText: string = '';
private dataNumbers: string[] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
private dataStrings: string[] = ['我的评论', '与我相关', '个人中心1', '个人中心2', '个人中心3', '我的发布', '设置', '退出登录'];
@State  data: string[] = this.dataStrings;

list界面展示

scss 复制代码
@Builder
private getListView() {
  List({ space: 20, scroller: this.scroller }) {
    ForEach(this.data, (item: string) => {
      ListItem() {
        Text(item)
          .width('100%')
          .height(150)
          .fontSize(20)
          .textAlign(TextAlign.Center)
          .backgroundColor('#95efd2')
      }
    })
  }
  .backgroundColor('#eeeeee')
  .divider({ strokeWidth: 1, color: 0x222222 })
  .edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
}

build 里面使用到我们 PullToRefresh 组件

typescript 复制代码
build() {
  Column() {
    PullToRefresh({
      // 必传项,列表组件所绑定的数据
      data: $data,
      // 必传项,需绑定传入主体布局内的列表或宫格组件
      scroller: this.scroller,
      // 必传项,自定义主体布局,内部有列表或宫格组件
      customList: () => {
        // 一个用@Builder修饰过的UI方法
        this.getListView();
      },
      // 可选项,下拉刷新回调
      onRefresh: () => {
        return new Promise<string>((resolve, reject) => {
          // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
          setTimeout(() => {
            resolve('刷新成功');
            this.data = this.dataNumbers;
          }, 2000);
        });
      },
      // 可选项,上拉加载更多回调
      onLoadMore: () => {
        return new Promise<string>((resolve, reject) => {
          // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
          setTimeout(() => {
            resolve('');
            this.data.push("增加的条目" + this.data.length);
          }, 2000);
        });
      },
      customLoad: null,
      customRefresh: null,
    })
  }
}

加载list的方法

javascript 复制代码
customList: () => {
  // 一个用@Builder修饰过的UI方法
  this.getListView();
},

下拉刷新的回调方法

typescript 复制代码
onRefresh: () => {
  return new Promise<string>((resolve, reject) => {
    // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
    setTimeout(() => {
      resolve('刷新成功');
      this.data = this.dataNumbers;
    }, 2000);
  });
},

上拉加载更多的回调方法

typescript 复制代码
onLoadMore: () => {
  return new Promise<string>((resolve, reject) => {
    // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
    setTimeout(() => {
      resolve('');
      this.data.push("增加的条目" + this.data.length);
    }, 2000);
  });
},

完整代码

typescript 复制代码
import { PullToRefresh } from '@ohos/pulltorefresh'

@Entry
@Component
struct Index {
  @State  refreshText: string = '';
  private dataNumbers: string[] = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'];
  private dataStrings: string[] = ['我的评论', '与我相关', '个人中心1', '个人中心2', '个人中心3', '我的发布', '设置', '退出登录'];

  @State  data: string[] = this.dataStrings;
  // 需绑定列表或宫格组件
  private scroller: Scroller = new Scroller();

  build() {
    Column() {
      PullToRefresh({
        // 必传项,列表组件所绑定的数据
        data: $data,
        // 必传项,需绑定传入主体布局内的列表或宫格组件
        scroller: this.scroller,
        // 必传项,自定义主体布局,内部有列表或宫格组件
        customList: () => {
          // 一个用@Builder修饰过的UI方法
          this.getListView();
        },
        // 可选项,下拉刷新回调
        onRefresh: () => {
          return new Promise<string>((resolve, reject) => {
            // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
            setTimeout(() => {
              resolve('刷新成功');
              this.data = this.dataNumbers;
            }, 2000);
          });
        },
        // 可选项,上拉加载更多回调
        onLoadMore: () => {
          return new Promise<string>((resolve, reject) => {
            // 模拟网络请求操作,请求网络2秒后得到数据,通知组件,变更列表数据
            setTimeout(() => {
              resolve('');
              this.data.push("增加的条目" + this.data.length);
            }, 2000);
          });
        },
        customLoad: null,
        customRefresh: null,
      })
    }
  }

  @Builder
  private getListView() {
    List({ space: 20, scroller: this.scroller }) {
      ForEach(this.data, (item: string) => {
        ListItem() {
          Text(item)
            .width('100%')
            .height(150)
            .fontSize(20)
            .textAlign(TextAlign.Center)
            .backgroundColor('#95efd2')
        }
      })
    }
    .backgroundColor('#eeeeee')
    .divider({ strokeWidth: 1, color: 0x222222 })
    .edgeEffect(EdgeEffect.None) // 必须设置列表为滑动到边缘无效果
  }
}

最后总结 :

鸿蒙next中的上来加载下拉刷新有在ohpm有前人做好的很好三方库实现了 当然你也可以自己去编写计算滑动的高度坐标来处理上拉加载和下拉刷新。 今天的文章就讲到这里有兴趣的同学可以配置好ohpm的环境变量 然后使用三方来体验这个效果 同时也感谢开发三方的作者感谢你们。 也希望鸿蒙和华为发展越来越好,最后的最后 如果你觉得文章还不错麻烦给我三连 关注点赞和转发 如果了解更多鸿蒙开发的知识 可以关注坚果派公众号 。 谢谢

更多鸿蒙的学习和需求可以关注坚果派

坚果派:

坚果派由坚果等人联合创建,团队拥有12个华为HDE,以及若干其他领域的三十余位万粉博主运营。专注于研究的技术包括HarmonyOS/OpenHarmony,仓颉,AI、BlueOS操作系统等。主营业务是面向国内外客户提供新一代信息技术为核心的产品、解决方案和服务。团队聚焦"鸿蒙原生应用"、"智能物联"和"AI赋能"、"人工智能"四大业务领域,依托华为开发者专家等强大的技术团队,以及涵盖需求、开发、测试、运维于一体的综合服务体系,赋能文旅、媒体、社交、家居、消费电子等行业客户,满足客户数字化升级转型的需求,帮助客户实现价值提升,欢迎合作。

相关推荐
羊小猪~~几秒前
前端入门之VUE--ajax、vuex、router,最后的前端总结
前端·javascript·css·vue.js·vscode·ajax·html5
摸鱼了15 分钟前
🚀 从零开始搭建 Vue 3+Vite+TypeScript+Pinia+Vue Router+SCSS+StyleLint+CommitLint+...项目
前端·vue.js
程序员shen16161127 分钟前
抖音短视频saas矩阵源码系统开发所需掌握的技术
java·前端·数据库·python·算法
Ling_suu1 小时前
SpringBoot3——Web开发
java·服务器·前端
Yvemil71 小时前
《开启微服务之旅:Spring Boot Web开发》(二)
前端·spring boot·微服务
hanglove_lucky1 小时前
本地摄像头视频流在html中打开
前端·后端·html
维李设论1 小时前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
2401_857600951 小时前
基于 SSM 框架 Vue 电脑测评系统:赋能电脑品质鉴定
前端·javascript·vue.js
天之涯上上1 小时前
Pinia 是一个专为 Vue.js 3 设计的状态管理库
前端·javascript·vue.js
@大迁世界1 小时前
摆脱 `<div>`!7 种更语义化的 HTML 标签替代方案
前端·html