当前位置:首页 > 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
  };
}

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

相关文章

vue 实现分页

vue 实现分页

分页实现方法 在Vue中实现分页功能,可以通过计算属性和方法结合来实现。以下是一个典型的分页实现方式: 模板部分 <template> <div> <ul…

vue分页实现

vue分页实现

Vue 分页实现方法 基础分页组件实现 创建一个简单的分页组件,包含上一页、下一页和页码按钮。组件接收当前页码、总页数等参数,通过事件通知父组件页码变化。 <template> &l…

js实现分页功能代码

js实现分页功能代码

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

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

vue实现分页组件

vue实现分页组件

Vue 分页组件实现 基础分页组件结构 创建一个名为 Pagination.vue 的文件,包含以下基础模板和逻辑: <template> <div class="pagina…

vue实现搜索分页

vue实现搜索分页

实现搜索分页的基本思路 在Vue中实现搜索分页功能通常需要结合以下几个关键点:数据绑定、搜索过滤、分页逻辑处理。以下是一个完整的实现方案。 数据准备与绑定 定义数据列表和分页相关变量,通常包括当前页…