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

vue加载实现分页

<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>

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

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

相关文章

php分页代码简单实现

php分页代码简单实现

基本分页实现 在PHP中实现分页功能通常需要结合MySQL的LIMIT子句。以下是一个基础实现示例: <?php // 数据库连接 $conn = mysqli_connect("localh…

vue router实现分页

vue router实现分页

使用 Vue Router 实现分页 在 Vue.js 项目中,可以通过 Vue Router 结合分页组件实现分页功能。以下是实现分页的几种方法: 使用路由参数传递页码 在路由配置中定义一个动态参…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

vue实现加载条

vue实现加载条

Vue 实现加载条的方法 使用第三方库(如 NProgress) 安装 NProgress 库: npm install nprogress 在 Vue 项目中引入并使用: import NPro…

js实现页面加载

js实现页面加载

监听 DOMContentLoaded 事件 使用 DOMContentLoaded 事件可以在 HTML 文档完全加载和解析后触发,无需等待样式表、图像等外部资源加载完成。 document.…