当前位置:首页 > VUE

vue加载实现分页

2026-01-16 02:18:29VUE

Vue 实现分页加载的方法

使用 Element UI 的分页组件

安装 Element UI 后,可以直接使用其分页组件。在模板中添加分页组件,并绑定相关事件和数据。

<template>
  <div>
    <el-table :data="tableData">
      <!-- 表格列定义 -->
    </el-table>
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage"
      :page-sizes="[10, 20, 30, 40]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total">
    </el-pagination>
  </div>
</template>

在脚本部分定义相关数据和方法:

<script>
export default {
  data() {
    return {
      tableData: [],
      currentPage: 1,
      pageSize: 10,
      total: 0
    }
  },
  methods: {
    handleSizeChange(val) {
      this.pageSize = val;
      this.fetchData();
    },
    handleCurrentChange(val) {
      this.currentPage = val;
      this.fetchData();
    },
    fetchData() {
      // 调用 API 获取数据
      const params = {
        page: this.currentPage,
        size: this.pageSize
      };
      // 假设有一个 getData 方法用于获取数据
      getData(params).then(res => {
        this.tableData = res.data;
        this.total = res.total;
      });
    }
  },
  created() {
    this.fetchData();
  }
}
</script>

使用自定义分页逻辑

如果不使用 UI 库,可以手动实现分页逻辑。在模板中创建分页控件:

<template>
  <div>
    <table>
      <!-- 表格内容 -->
    </table>
    <div class="pagination">
      <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
      <span>第 {{ currentPage }} 页</span>
      <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
    </div>
  </div>
</template>

在脚本部分实现分页逻辑:

<script>
export default {
  data() {
    return {
      data: [],
      currentPage: 1,
      pageSize: 10,
      totalItems: 0
    }
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.pageSize);
    }
  },
  methods: {
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--;
        this.fetchData();
      }
    },
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++;
        this.fetchData();
      }
    },
    fetchData() {
      // 调用 API 获取数据
      const params = {
        page: this.currentPage,
        size: this.pageSize
      };
      // 假设有一个 getData 方法用于获取数据
      getData(params).then(res => {
        this.data = res.data;
        this.totalItems = res.total;
      });
    }
  },
  created() {
    this.fetchData();
  }
}
</script>

使用无限滚动加载

对于无限滚动加载,可以使用第三方库如 vue-infinite-loading。安装后,在组件中使用:

<template>
  <div>
    <div v-for="item in items" :key="item.id">
      <!-- 渲染每一项 -->
    </div>
    <infinite-loading @infinite="infiniteHandler"></infinite-loading>
  </div>
</template>

在脚本部分实现无限滚动逻辑:

<script>
import InfiniteLoading from 'vue-infinite-loading';

export default {
  components: {
    InfiniteLoading
  },
  data() {
    return {
      items: [],
      page: 1,
      size: 10
    }
  },
  methods: {
    infiniteHandler($state) {
      getData({
        page: this.page,
        size: this.size
      }).then(res => {
        if (res.data.length) {
          this.items = this.items.concat(res.data);
          this.page++;
          $state.loaded();
        } else {
          $state.complete();
        }
      });
    }
  }
}
</script>

使用 Vuex 管理分页状态

对于大型应用,可以使用 Vuex 管理分页状态。首先定义 Vuex store:

// store.js
export default new Vuex.Store({
  state: {
    data: [],
    currentPage: 1,
    pageSize: 10,
    total: 0
  },
  mutations: {
    SET_DATA(state, payload) {
      state.data = payload.data;
      state.total = payload.total;
    },
    SET_PAGE(state, page) {
      state.currentPage = page;
    }
  },
  actions: {
    fetchData({ commit, state }) {
      const params = {
        page: state.currentPage,
        size: state.pageSize
      };
      getData(params).then(res => {
        commit('SET_DATA', res);
      });
    }
  }
});

在组件中调用 Vuex actions:

<script>
import { mapState, mapActions } from 'vuex';

export default {
  computed: {
    ...mapState(['data', 'currentPage', 'pageSize', 'total'])
  },
  methods: {
    ...mapActions(['fetchData']),
    handlePageChange(page) {
      this.$store.commit('SET_PAGE', page);
      this.fetchData();
    }
  },
  created() {
    this.fetchData();
  }
}
</script>

以上方法可以根据具体需求选择适合的实现方式,灵活应用于不同场景。

vue加载实现分页

标签: 分页加载
分享给朋友:

相关文章

vue滚动加载实现

vue滚动加载实现

vue滚动加载实现 滚动加载是一种常见的优化手段,通过监听滚动事件动态加载数据,减少初始渲染压力。以下是几种实现方式: 使用IntersectionObserver API Intersection…

vue实现页面分页

vue实现页面分页

Vue实现页面分页的方法 使用Element UI的分页组件 Element UI提供了现成的分页组件el-pagination,可以快速实现分页功能。需要先安装Element UI库。 <t…

vue 分页的实现

vue 分页的实现

Vue 分页的实现方法 使用 Element UI 的分页组件 安装 Element UI: npm install element-ui 在 Vue 项目中引入 Element UI 的分页组件:…

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

vue实现后台分页

vue实现后台分页

实现后台分页的方法 在Vue中实现后台分页通常需要结合前端和后端逻辑,后端负责处理数据分页,前端负责展示分页数据和交互。以下是具体实现方法: 后端API设计 后端需要提供支持分页的API接口,通常包…

vue实现预加载

vue实现预加载

Vue 实现预加载的方法 预加载可以显著提升用户体验,减少页面切换时的等待时间。以下是几种在 Vue 中实现预加载的常见方法: 使用 preload 或 prefetch 标签 在构建工具(如 W…