当前位置:首页 > VUE

vue实现接口分页

2026-03-30 00:59:19VUE

vue实现接口分页的方法

使用axios发送分页请求

在Vue项目中,可以通过axios发送分页请求到后端接口。通常后端接口会接受pagepageSize参数,返回分页数据。

import axios from 'axios';

export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      total: 0,
      list: []
    }
  },
  methods: {
    async fetchData() {
      const res = await axios.get('/api/list', {
        params: {
          page: this.currentPage,
          pageSize: this.pageSize
        }
      });
      this.list = res.data.list;
      this.total = res.data.total;
    }
  },
  created() {
    this.fetchData();
  }
}

结合Element UI的分页组件

如果使用Element UI,可以配合其分页组件el-pagination实现完整的分页功能。

vue实现接口分页

<template>
  <div>
    <el-table :data="list">
      <!-- 表格内容 -->
    </el-table>
    <el-pagination
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="total"
      layout="total, prev, pager, next">
    </el-pagination>
  </div>
</template>

<script>
export default {
  methods: {
    handleCurrentChange(val) {
      this.currentPage = val;
      this.fetchData();
    }
  }
}
</script>

使用Vuex管理分页状态

对于大型项目,建议使用Vuex集中管理分页状态。

vue实现接口分页

// store/modules/list.js
const state = {
  currentPage: 1,
  pageSize: 10,
  total: 0,
  list: []
};

const mutations = {
  SET_LIST(state, payload) {
    state.list = payload.list;
    state.total = payload.total;
  },
  SET_PAGE(state, page) {
    state.currentPage = page;
  }
};

const actions = {
  async fetchList({ commit, state }) {
    const res = await axios.get('/api/list', {
      params: {
        page: state.currentPage,
        pageSize: state.pageSize
      }
    });
    commit('SET_LIST', res.data);
  }
};

实现无限滚动分页

对于移动端或需要无限滚动的场景,可以监听滚动事件实现分页加载。

export default {
  data() {
    return {
      isLoading: false,
      isFinished: false,
      page: 1,
      list: []
    }
  },
  methods: {
    async loadMore() {
      if (this.isLoading || this.isFinished) return;

      this.isLoading = true;
      const res = await axios.get('/api/list', {
        params: {
          page: this.page,
          pageSize: 10
        }
      });

      this.list = [...this.list, ...res.data.list];
      this.page++;
      this.isLoading = false;

      if (res.data.list.length < 10) {
        this.isFinished = true;
      }
    },
    handleScroll() {
      const scrollHeight = document.documentElement.scrollHeight;
      const scrollTop = document.documentElement.scrollTop;
      const clientHeight = document.documentElement.clientHeight;

      if (scrollTop + clientHeight >= scrollHeight - 50) {
        this.loadMore();
      }
    }
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll);
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll);
  }
}

使用分页hook封装

可以将分页逻辑封装为可复用的hook,提高代码复用性。

// hooks/usePagination.js
import { ref } from 'vue';
import axios from 'axios';

export default function usePagination(apiUrl) {
  const currentPage = ref(1);
  const pageSize = ref(10);
  const total = ref(0);
  const list = ref([]);
  const loading = ref(false);

  const fetchData = async () => {
    loading.value = true;
    try {
      const res = await axios.get(apiUrl, {
        params: {
          page: currentPage.value,
          pageSize: pageSize.value
        }
      });
      list.value = res.data.list;
      total.value = res.data.total;
    } finally {
      loading.value = false;
    }
  };

  const handlePageChange = (page) => {
    currentPage.value = page;
    fetchData();
  };

  return {
    currentPage,
    pageSize,
    total,
    list,
    loading,
    fetchData,
    handlePageChange
  };
}

标签: 分页接口
分享给朋友:

相关文章

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口通…

js实现分页功能代码

js实现分页功能代码

分页功能实现方法 客户端分页(前端处理数据) 适用于数据量较小且已全部加载到前端的情况。 // 示例数据 const data = Array.from({length: 100}, (_, i)…

vue实现分页缩进

vue实现分页缩进

vue实现分页缩进的方法 使用v-for和计算属性实现分页 通过计算属性对数据进行分页处理,结合v-for渲染分页数据。计算属性根据当前页码和每页显示数量对原始数据进行切片。 computed: {…

vue实现分页多元

vue实现分页多元

Vue 实现分页的多种方法 在 Vue 中实现分页功能有多种方式,可以根据项目需求选择合适的方法。以下是几种常见的实现方式: 使用 Element UI 的分页组件 Element UI 提供了现成…

vue怎么实现分页

vue怎么实现分页

Vue 分页实现方法 基于 Element UI 的分页组件 Element UI 提供了现成的分页组件 el-pagination,适合快速集成。 安装 Element UI: npm inst…

vue分页代码实现

vue分页代码实现

Vue 分页代码实现 在 Vue 中实现分页功能通常需要结合后端 API 返回的数据和前端的分页组件。以下是一个完整的实现示例,包括分页组件的封装和与后端数据的交互。 分页组件封装 创建一个…