实际开发中,前端实现数据分页

实际开发中,有些场景需要前端实现分页,具体代码实现如下

<template>
   <!-- 首页的专题服务模块  -->
  <div class="special-service" v-if="specialServiceList.length > 0">
    <div class="special-service-content">
      <TitBox tit="专题服务">
        <div class="right-op" v-if="specialServiceList.length > 3">
            <div :class="ifActive === 'left' && 'activation'" class="left" @click="leftFn"><a-icon type="left" /></div>
            <div :class="ifActive === 'right' && 'activation'" class="right" @click="rightFn"><a-icon type="right" /></div>
        </div>
      </TitBox>
      <div class="special-service-list">
        <div class="item" v-for="item in tempSpecialServiceList" :key="item.id" @click="clickItemFn(item.sceneUrl)">
          <img :src="item.url" alt="">
          <h2>{{item.title}}</h2>
        </div>
      </div>
      <div class="look-more" @click="ztMoreFn">查看更多<a-icon style="margin-left: 8px;" type="swap-right" /></div>
    </div>
  </div>
</template>

<script>
import TitBox from './TitBox.vue';
export default {
    props : ["specialServiceList"],
    data() {
        return {
          tempSpecialServiceList : [],
          ifActive : "right",
          pageNum : 1,
          pageSize : 3
        }
    },
    watch : {
      // specialServiceList   父组件传的,也是接口返回的所有数据的容器
      specialServiceList : {
        handler(newData) {
          if(newData.length > 0) {
            // 监听
            this.tempSpecialServiceList = this.specialServiceList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize);
          }
        },
        immediate : true
      },
      // 监听页码的改变 再次处理this.specialServiceList
      pageNum(){
        this.tempSpecialServiceList = this.specialServiceList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize);
      }
    },
    components : {
      TitBox
    },
    methods : {
      // 专题服务查看更多
      ztMoreFn() {
        this.$router.push({ name: "SpecialService"});
      },
      clickItemFn(sceneUrl) {
        window.open(sceneUrl,"_blank");
      },
      leftFn() {
        this.ifActive = "left";
        if(this.pageNum === 1) {
          this.pageNum = 1;
        } else {
          this.pageNum -= 1;
        }
      },
      rightFn() {
        this.ifActive = "right";
        if(this.tempSpecialServiceList.length === 0) return;
        this.pageNum += 1;
      }
    },
};
</script>

<style scoped>
</style>

核心代码

// this.specialServiceList 保存的是后端返回的所有数据
// this.pageNum 当前页码
// this.pageSize  每页条数
this.specialServiceList.slice((this.pageNum - 1) * this.pageSize, this.pageNum * this.pageSize)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

原谅我很悲

不要打赏哦,加个好友一起学习呗

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

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

打赏作者

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

抵扣说明:

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

余额充值