Vue利用slice()方法实现分页操作

前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


一、1. 思路 : 使用 slice()方法进行分页?

1-1. 拿到要分页的表格数据过后,获取到表格数据的长度,将表格数据的长度设置 为分页器里面的总条目数

this.total = this.pdDataList.length;

1-2. 让后在 分页器里面的 total 属性上进行绑定
1-3. 在 Vue 中的 data 里面设置 当前页和 当前条数: 即(currentPage 和 pagesize)

1-4. element-ui 中分页器为我们提供了两个事件:
size-change : 每页条数 改变时触发
current-change :当前页 改变时触发
1-5. 在 size-change 事件里面 将 data 中定义的 pagesize 的值进行改变
handleSizeChange(pageSize){
// pageSize 是当前选中的条数
this.pagesize = pageSize;
},
1-6. 在 current-change 事件里面将 data 中定义的 currentPage 的值进行改变
// 当前页改变时触发
handleCurrentChange(pageNum){
// pageNum 是当前点击的页码
this.currentPage = pageNum;
}
1-7. 然后在 表格数据绑定的时候利用 数组的 slice() 方法进行分页
:data=“pdDataList.slice((currentPage-1)pagesize,currentPagepagesize)”

二、使用步骤

1.表格区域

代码如下(示例):

      <el-table :data="pdDataList.slice((currentPage-1)*pagesize,currentPage*pagesize)" style="width: 100%" border>
        <el-table-column type="index" align="center" label="序号" width="60">
        </el-table-column>
        <el-table-column prop="PDNO" align="center" label="单号" width="180">
        </el-table-column>
        <el-table-column align="center" label="盘点状态" width="180">
          <template slot-scope="scope">
            <el-tag type="info" v-if="scope.row.PDFREQ === 'A'">待盘点</el-tag>
            <el-tag type="warning" v-if="scope.row.PDFREQ === 'B'"
              >盘点中</el-tag
            >
            <el-tag v-if="scope.row.PDFREQ === 'C'">已提交</el-tag>
            <el-tag type="success" v-if="scope.row.PDFREQ === 'D'"
              >已结束</el-tag
            >
          </template>
        </el-table-column>
        <el-table-column prop="WARENO" align="center" label="仓码" width="180">
        </el-table-column>
        <el-table-column prop="STORENO" align="center" label="储位">
        </el-table-column>
        <el-table-column prop="MATNO" align="center" label="料号">
        </el-table-column>
        <el-table-column prop="SHOULD_START" align="center" label="开始时间">
        </el-table-column>
        <el-table-column prop="SHOULD_FINISH" align="center" label="截止时间">
        </el-table-column>
        <el-table-column prop="REAL_QTY" align="center" label="实盘">
        </el-table-column>
        <el-table-column prop="SHOULD_QTY" align="center" label="应盘">
        </el-table-column>
      </el-table>

      <!-- 分页器 -->
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="currentPage" 
        :page-sizes="[5, 10, 15, 20]"
        :page-size="pagesize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
      >
      </el-pagination>

2.JS模块代码

代码如下(示例):

export default {
  data() {
    return {
      // 盘点清单的查询条件
      pdInfo: {
        plantno: "MAC1FTH", //工廠DB(必須)
        empno: "F3841014", //登錄工號(必須,不是賬號)
        workDate: "2022-5-14", //任務日期(必須)
        wareno: "", //倉碼
        storeno: "", //儲位
        matno: "", //料號(可模糊)
        pdstate: "", //盤點單狀態
      },
      stateList: [], // 盘点状态
      pdDataList: [], // 盘点清单数据
      total:0,      // 总条数
      currentPage:1,    // 当前页
      pagesize:5,       // 每页显示条目个数
    };
  },

  mounted() {},
  created() {
    this.getTime();
    this.getPdState();
    console.log("获取state", this.$store.state);
  },
  //   计算属性
  computed: {
    empno() {
      return this.$store.state.user.userid;
    },
    plantno() {
      return this.$store.state.user.plantno;
    },
  },
  methods: {
    // 获取当前时间所在日期
    async getTime() {
      const res = await workTime();
      this.pdInfo.workDate = res.data.data.date;
      // 在日其查询完毕后,发送盘点清单的请求
      this.getPdList();
    },

    // 获取盘点清单
    async getPdList() {
      console.log("盘点信息", this.pdInfo);
      const res = await pdList(this.pdInfo);
      console.log("获取盘点清单", res);
      if (res.data.state !== 0)
        return this.$message.error("获取数据失败,请重新在试");
      this.pdDataList = res.data.data;
      this.total = this.pdDataList.length;
      return this.$message.success(res.data.desc);
    },

    // 获取盘点状态
    async getPdState() {
      const res = await pdState();
      console.log("获取状态", res);
      this.stateList = res.data.data;
    },

    // 每页条数改变时触发
    handleSizeChange(pageSize){
        console.log('条数',pageSize);
        this.pagesize = pageSize;           // 在 每次 每页条数触发的时候,将选择中的值 赋值给 data 里面定义的 页显示条目个数
    },

    // 当前页改变时触发
    handleCurrentChange(pageNum){
        console.log('当前页改变时触发',pageNum);
        this.currentPage = pageNum;     // 在每次当前页改变后的值 赋值给 data 里面定义的 当前页
    }
  },
};

总结

提示:这里对文章进行总结:

例如:以上就是Vue利用slice()方法实现分页操作

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你可以使用第三方的弹窗组件库,例如 Element UI 或者 Vuetify。这些组件库都提供了弹窗组件,并且可以轻松地在 Vue 中使用。 对于分页实现,你可以使用 Vue 的计算属性来计算当前页要显示的数据。根据你的具体需求,你可以在弹窗中嵌入一个分页组件,或者手动编写分页逻辑。 以下是一个示例代码,使用 Element UI 的弹窗组件和分页组件: ```html <template> <div> <el-button @click="showDialog">打开弹窗</el-button> <el-dialog :visible.sync="dialogVisible"> <el-table :data="pagedData" border> <el-table-column prop="id" label="ID"></el-table-column> <el-table-column prop="name" label="名称"></el-table-column> </el-table> <el-pagination :current-page.sync="currentPage" :page-size="pageSize" :total="total" @current-change="handleCurrentChange" ></el-pagination> </el-dialog> </div> </template> <script> import { reactive, computed } from 'vue'; import { Dialog, Table, TableColumn, Pagination, Button } from 'element-ui'; import axios from 'axios'; export default { components: { ElDialog: Dialog, ElTable: Table, ElTableColumn: TableColumn, ElPagination: Pagination, ElButton: Button, }, setup() { const state = reactive({ dialogVisible: false, data: [], // 所有数据 currentPage: 1, // 当前页码 pageSize: 10, // 每页数量 }); // 获取数据 const fetchData = async () => { const res = await axios.get('/api/data'); state.data = res.data; }; // 计算当前页要显示的数据 const pagedData = computed(() => { const start = (state.currentPage - 1) * state.pageSize; const end = start + state.pageSize; return state.data.slice(start, end); }); // 数据总数 const total = computed(() => state.data.length); // 处理当前页码变化 const handleCurrentChange = (page) => { state.currentPage = page; }; // 打开弹窗 const showDialog = () => { fetchData(); state.dialogVisible = true; }; return { dialogVisible: state.dialogVisible, pagedData, currentPage: state.currentPage, pageSize: state.pageSize, total, handleCurrentChange, showDialog, }; }, }; </script> ``` 在这个示例中,我们使用了 Element UI 的弹窗组件和分页组件,以及 Axios 库来获取数据。在 `setup` 函数中,我们使用了 Vue 3 的新特性 `reactive` 来创建响应式对象,以及 `computed` 来计算当前页要显示的数据和数据总数。在模板中,我们嵌入了一个表格和一个分页组件,在弹窗中显示数据。当用户点击分页组件的页码时,我们会更新当前页码,同时计算出新的要显示的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java毕设王

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

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

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

打赏作者

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

抵扣说明:

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

余额充值