当前位置:首页 > VUE

如何实现分页vue

2026-01-18 02:59:28VUE

使用 v-pagination 组件(Vuetify)

如果项目使用 Vuetify,可以直接使用内置的 v-pagination 组件。该组件提供了分页功能,支持自定义样式和事件。

<template>
  <v-pagination
    v-model="currentPage"
    :length="totalPages"
    @input="handlePageChange"
  ></v-pagination>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      totalPages: 10,
    };
  },
  methods: {
    handlePageChange(page) {
      console.log("切换到页码:", page);
      // 在这里调用 API 或更新数据
    },
  },
};
</script>

使用 el-pagination 组件(Element UI)

如果项目使用 Element UI,可以使用 el-pagination 组件实现分页功能。

<template>
  <el-pagination
    :current-page="currentPage"
    :page-size="pageSize"
    :total="totalItems"
    @current-change="handlePageChange"
    layout="prev, pager, next"
  ></el-pagination>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 100,
    };
  },
  methods: {
    handlePageChange(page) {
      console.log("切换到页码:", page);
      // 在这里调用 API 或更新数据
    },
  },
};
</script>

手动实现分页逻辑

如果没有使用 UI 框架,可以手动实现分页逻辑。以下是一个简单的分页组件示例:

<template>
  <div class="pagination">
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }} / {{ totalPages }}</span>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

<script>
export default {
  props: {
    totalItems: {
      type: Number,
      required: true,
    },
    pageSize: {
      type: Number,
      default: 10,
    },
  },
  data() {
    return {
      currentPage: 1,
    };
  },
  computed: {
    totalPages() {
      return Math.ceil(this.totalItems / this.pageSize);
    },
  },
  methods: {
    prevPage() {
      if (this.currentPage > 1) {
        this.currentPage--;
        this.$emit("page-change", this.currentPage);
      }
    },
    nextPage() {
      if (this.currentPage < this.totalPages) {
        this.currentPage++;
        this.$emit("page-change", this.currentPage);
      }
    },
  },
};
</script>

<style>
.pagination {
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 10px;
}
</style>

结合 API 分页请求

分页通常需要与后端 API 配合,以下是一个结合 API 请求的分页示例:

<template>
  <div>
    <ul>
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
    <el-pagination
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems"
      @current-change="fetchData"
    ></el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      items: [],
    };
  },
  mounted() {
    this.fetchData();
  },
  methods: {
    async fetchData(page = 1) {
      this.currentPage = page;
      const response = await axios.get("/api/items", {
        params: {
          page: this.currentPage,
          pageSize: this.pageSize,
        },
      });
      this.items = response.data.items;
      this.totalItems = response.data.total;
    },
  },
};
</script>

分页逻辑优化

为了提高用户体验,可以在分页时添加加载状态:

<template>
  <div>
    <div v-if="loading">加载中...</div>
    <ul v-else>
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
    <el-pagination
      :current-page="currentPage"
      :page-size="pageSize"
      :total="totalItems"
      @current-change="fetchData"
      :disabled="loading"
    ></el-pagination>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentPage: 1,
      pageSize: 10,
      totalItems: 0,
      items: [],
      loading: false,
    };
  },
  methods: {
    async fetchData(page = 1) {
      this.loading = true;
      this.currentPage = page;
      try {
        const response = await axios.get("/api/items", {
          params: {
            page: this.currentPage,
            pageSize: this.pageSize,
          },
        });
        this.items = response.data.items;
        this.totalItems = response.data.total;
      } catch (error) {
        console.error("分页请求失败:", error);
      } finally {
        this.loading = false;
      }
    },
  },
};
</script>

如何实现分页vue

分享给朋友:

相关文章

vue实现选项卡分页

vue实现选项卡分页

实现选项卡分页的基本思路 在Vue中实现选项卡分页功能,可以通过动态组件或条件渲染结合数据绑定完成。核心逻辑是维护一个当前激活的选项卡状态,根据用户点击切换内容。 使用v-if条件渲染 通过v-if…

vue如何实现曲线图

vue如何实现曲线图

使用 ECharts 实现曲线图 在 Vue 项目中安装 ECharts 依赖: npm install echarts --save 引入 ECharts 并创建基础图表组件: <temp…

vue分页实现

vue分页实现

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

react 如何分页

react 如何分页

分页实现方法 在React中实现分页功能可以通过多种方式完成,具体取决于数据来源(如API或本地数据)和UI库的选择。以下是常见的实现方法: 使用本地数据分页 对于存储在组件状态或Contex…

前段vue如何实现

前段vue如何实现

Vue 前端实现方法 Vue 是一款流行的前端框架,用于构建用户界面。以下是一些常见的 Vue 实现方法: 组件化开发 Vue 的核心思想是组件化开发。每个组件可以独立封装逻辑、模板和样式,便于复用…

vue如何实现404

vue如何实现404

实现 Vue 404 页面的方法 在 Vue 中实现 404 页面通常需要结合路由配置和动态路由匹配。以下是几种常见方法: 使用通配符路由匹配 在 Vue Router 配置中,可以通过 * 通配符…