vant-list的上拉加载和下拉刷新 + uniapp小程序页面高度计算

uniapp小程序页面高度计算

看不懂的话可以去看看这个博主的视频:https://www.bilibili.com/video/BV1Yg4y127Fp?p=80&vd_source=ebff660a6ef0a6cd2d5ffbfcf97a5312
export const get SheBeiXinXi = () => {
	let aa = uni.getSystemInfoSync();
	let statusBarHeight = aa.statusBarHeight || 0; //状态栏高度   也就是最顶部时间那一栏
	let padBod = aa.screenHeight - aa.safeArea.bottom; // 底部安全距离  也就是页面顶部到手机底部安全距离(ios手机那底部的小横条)
	
	 //胶囊按钮的信息  注意h5里面没有这个
	let titleBarHeight = 0
	let bb =null
	if (uni.getMenuButtonBoundingClientRect) {
		let menuButtonInfo=uni.getMenuButtonBoundingClientRect();
		//                       胶囊按钮的高度 +      胶囊按钮顶部    -   状态栏的高度
		titleBarHeight = menuButtonInfo.height + (menuButtonInfo.top - statusBarHeight) * 2;
		bb={
			show:true,
			data:menuButtonInfo
		}
	} else {
		// 有的没有胶囊按钮就直接返回40px高度
		titleBarHeight = 40;
		bb={
			show:false
		}
	}
	
	return {
		SheBeiXinXi:aa,//设备信息
		ZhuangTaiLan_Height:statusBarHeight,//状态栏高度
		bottom_Height:padBod,// 底部安全距离
		titleBarXinXi:bb,//胶囊按钮的信息
		titleBar_Height:titleBarHeight,//胶囊按钮的高度
	}
}

在这里插入图片描述

上拉加载和下拉刷新

  <div class="home">
 
      <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
        <van-list
          v-model:loading="loading"
          :finished="finished"
          finished-text="没有更多了"
          @load="onLoad"
          :distance="150"
        >
          <van-empty
            v-if="
              tableConfig.tableData.all &&
              tableConfig.tableData.all.length < 1 &&
              loading === false
            "
            description="未找到相关数据"
          />
          <div v-for="item in tableConfig.tableData.all" :key="item.number">
            666666
          </div>
        </van-list>
      </van-pull-refresh>

    
  </div>
</template>

<script>
import {
  ValidDepartmentList,
  GetJcHotelNewList,
  GetJcHouserentListPage,
} from "../api/index";
import { Toast } from "vant";
import {
  getDateStrings,
  getCurrentTime,
  getCookie,
  decodeCookies,
} from "../utile/tool";
export default {
  data() {
    return {
      loading: false,
      finished: false,
      refreshing: false,

      Cookie_USER: null,
      listTwo: [], //测试数据
      departmentOptions: [],
      show_Deptname: false,
      queryParams: {
        deptname: "", //部门
        adminname: "", //宿舍名称
        hotelname: "", //宿管员
        userid: null,
        name: "", //关键字
      },
      tableConfig: {
        tableData: {
          all: [], //获取的数据
          select: [], //存放选择的数据
          loading: false,
          finished: false,
          error: false,
        },
      },
      pageConfig: {
        //每页行数F_IsCutOff
        limit: 30,
        // 当前页
        page: 0,
        //总记录数
        count: 0,
      },
    };
  },
  created() {
  },
  computed: {},

  mounted() {
    this.departmentList();
  },
  methods: {
    // 搜索框搜索
    onSearch(val) {
      // console.log("搜索的", this.queryParams);
      this.pageConfig.page = 1;
      this.getPageList();
    },
    // 获取宿舍列表
    getPageList() {
      // console.log('数据接口')
      this.tableConfig.tableData.select.length = 0;

      if (this.queryParams.deptname === "全部(区域)") {
        this.queryParams.deptname = "";
      }

      let deptname = this.queryParams.deptname; //部门
      let adminname = this.queryParams.adminname; //宿舍名称
      let hotelname = this.queryParams.hotelname; //宿管
      let userid = this.queryParams.userid; //cookiues里面的id
      let page = this.pageConfig.page; //部门
      let limit = this.pageConfig.limit; //部门

      GetJcHotelNewList(
        deptname,
        adminname,
        hotelname,
        userid,
        page,
        limit
      ).then((data) => {
        // console.log("这个是数据", data);
        if (data.code !== 200) {
          Toast.fail(data.msg);
          return;
        }
        if (data.data.list.length == 0) {
          // 本次没有数据
          if (this.pageConfig.page > 1) {
            // 不是第一页,上拉加载
            this.finished = true; // 数据全部加载完毕
          } else {
            //第一页,下拉刷新
            this.tableConfig.tableData.all = [];
            this.pageConfig.count = 0;
            Toast.fail("暂无数据");
            this.refreshing = false;
          }
        } else {
          if (this.pageConfig.page > 1) {
            this.tableConfig.tableData.all =
              this.tableConfig.tableData.all.concat(data.data.list);
          } else {
            this.tableConfig.tableData.all = data.data.list;
            this.refreshing = false;
          }
          if (data.data.list.length < this.pageConfig.limit) {
            this.finished = true;
          }
        }
        this.pageConfig.count = data.data.count;

        // 更新 loading 和 finished 的状态值
        this.loading = false;
        // 如果数据全部加载完毕,则将 finished 置为 true
        if (this.finished) {
          Toast("已经没有更多数据了");
        }
      });
    },
    onLoad() {
      // console.log("上啦加载111", this.finished, this.loading);

      this.loading = true;
      this.pageConfig.page++;
      // console.log("上啦加载222", this.finished, this.loading);

      this.getPageList();
    },
    onRefresh() {
      // console.log("下拉刷新111", this.finished, this.loading);
      // 下拉刷新
      this.pageConfig.page = 1;
      this.finished = false; // 每次下拉刷新,要将finished置为false
      this.getPageList();
      // console.log("下拉刷新222", this.finished, this.loading);
    },
  },
};
</script>

<style lang="less" scoped>
</style>

好的,针对您的问题,下面是vant-list实现下拉刷新和上加载的方法: 1. 安装vant 首先需要在项目中安装vant,可以通过npm或yarn进行安装: npm install vant --save 或者 yarn add vant 2. 引入vant 在需要使用vant页面中引入vant: import Vue from 'vue'; import Vant from 'vant'; import 'vant/lib/index.css'; Vue.use(Vant); 3. 使用vant-list页面中使用vant-list组件,用于展示列表数据: <van-list :finished="finished" @load="onLoad" @refresh="onRefresh"> <!-- 列表项 --> </van-list> 其中,@load和@refresh分别是上加载下拉刷新的事件,finished用于控制是否已加载完所有数据。 4. 实现下拉刷新页面的methods中定义onRefresh方法,用于处理下拉刷新事件: export default { data() { return { list: [], // 列表数据 page: 1, // 当前页码 pageSize: 10, // 每页数据数量 finished: false // 是否已加载完所有数据 }; }, methods: { async onRefresh() { this.page = 1; // 下拉刷新时重置页码 this.list = []; // 清空列表数据 await this.loadData(); // 加载数据 this.finished = false; // 重置finished状态 }, async loadData() { // 根据当前页码和每页数据数量加载数据 const data = await api.getList(this.page, this.pageSize); if (data.length > 0) { this.list = this.list.concat(data); // 将数据添加到列表中 this.page++; // 页码+1 } else { this.finished = true; // 已加载完所有数据 } } } }; 5. 实现上加载页面的methods中定义onLoad方法,用于处理上加载事件: export default { data() { return { list: [], // 列表数据 page: 1, // 当前页码 pageSize: 10, // 每页数据数量 finished: false // 是否已加载完所有数据 }; }, methods: { async onRefresh() { this.page = 1; // 下拉刷新时重置页码 this.list = []; // 清空列表数据 await this.loadData(); // 加载数据 this.finished = false; // 重置finished状态 }, async onLoad() { if (this.finished) return; // 如果已加载完所有数据则直接返回 await this.loadData(); // 加载数据 }, async loadData() { // 根据当前页码和每页数据数量加载数据 const data = await api.getList(this.page, this.pageSize); if (data.length > 0) { this.list = this.list.concat(data); // 将数据添加到列表中 this.page++; // 页码+1 } else { this.finished = true; // 已加载完所有数据 } } } }; 通过以上步骤,就可以实现vant-list下拉刷新和上加载功能了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾不错吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值