当前位置:首页 > VUE

vue搜索分页实现

2026-02-19 00:51:16VUE

Vue 搜索分页实现

基本思路

在Vue中实现搜索分页功能,通常需要结合后端API接口,前端处理搜索关键词、分页参数以及数据渲染。以下是实现的核心步骤和代码示例。

数据准备

定义组件的数据结构,包括搜索关键词、分页参数、列表数据等。

data() {
  return {
    searchQuery: '', // 搜索关键词
    currentPage: 1,   // 当前页码
    pageSize: 10,     // 每页显示条数
    total: 0,         // 总数据量
    list: [],         // 列表数据
    loading: false    // 加载状态
  }
}

搜索方法

封装搜索请求方法,调用后端API并处理返回结果。

methods: {
  async fetchData() {
    this.loading = true;
    try {
      const params = {
        keyword: this.searchQuery,
        page: this.currentPage,
        size: this.pageSize
      };
      const res = await api.getList(params); // 假设api是封装好的请求方法
      this.list = res.data.list;
      this.total = res.data.total;
    } catch (error) {
      console.error('搜索失败:', error);
    } finally {
      this.loading = false;
    }
  }
}

分页组件

使用Element UI或其他UI库的分页组件,绑定分页参数和事件。

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

事件处理

处理分页切换和搜索事件,触发数据重新加载。

methods: {
  handlePageChange(page) {
    this.currentPage = page;
    this.fetchData();
  },
  handleSearch() {
    this.currentPage = 1; // 搜索时重置页码
    this.fetchData();
  }
}

防抖优化

为避免频繁触发搜索请求,可以为搜索输入框添加防抖功能。

import { debounce } from 'lodash';

methods: {
  handleSearch: debounce(function() {
    this.currentPage = 1;
    this.fetchData();
  }, 500)
}

完整示例

以下是一个完整的Vue组件示例:

vue搜索分页实现

<template>
  <div>
    <el-input v-model="searchQuery" placeholder="请输入关键词" @input="handleSearch"></el-input>
    <el-table :data="list" v-loading="loading">
      <!-- 表格列定义 -->
    </el-table>
    <el-pagination
      @current-change="handlePageChange"
      :current-page="currentPage"
      :page-size="pageSize"
      :total="total"
      layout="total, prev, pager, next, jumper">
    </el-pagination>
  </div>
</template>

<script>
import { debounce } from 'lodash';

export default {
  data() {
    return {
      searchQuery: '',
      currentPage: 1,
      pageSize: 10,
      total: 0,
      list: [],
      loading: false
    }
  },
  methods: {
    handlePageChange(page) {
      this.currentPage = page;
      this.fetchData();
    },
    handleSearch: debounce(function() {
      this.currentPage = 1;
      this.fetchData();
    }, 500),
    async fetchData() {
      this.loading = true;
      try {
        const params = {
          keyword: this.searchQuery,
          page: this.currentPage,
          size: this.pageSize
        };
        const res = await api.getList(params);
        this.list = res.data.list;
        this.total = res.data.total;
      } catch (error) {
        console.error('搜索失败:', error);
      } finally {
        this.loading = false;
      }
    }
  },
  mounted() {
    this.fetchData();
  }
}
</script>

注意事项

  • 确保后端API支持关键词搜索和分页参数。
  • 分页组件的total属性需要与后端返回的总数据量一致。
  • 加载状态loading可以提升用户体验,避免重复请求。

标签: 分页vue
分享给朋友:

相关文章

vue实现继承语法糖

vue实现继承语法糖

在Vue中实现继承可以通过多种方式模拟类继承的效果,以下是常见的几种方法: 使用mixins实现逻辑复用 通过Vue的mixins机制共享组件选项,达到类似继承的效果: const BaseCom…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue实现星星

vue实现星星

实现星星评分的Vue组件 使用Vue实现星星评分功能可以通过组件化方式完成,以下是一个完整的实现方案: 模板部分 <template> <div class="star-ra…

vue实现mui

vue实现mui

使用 Vue 实现 MUI(Material-UI)风格的界面 Vue 本身不直接提供 MUI(Material Design)组件,但可以通过集成第三方库或手动实现来达到类似效果。以下是几种常见方法…

vue实现白板

vue实现白板

Vue实现白板功能 使用Vue实现白板功能可以通过HTML5的Canvas API结合Vue的响应式特性来完成。以下是实现白板功能的关键步骤: 安装依赖 在Vue项目中安装必要的依赖,如vue-dr…

vue遮罩实现

vue遮罩实现

实现 Vue 遮罩的常见方法 使用 CSS 定位和透明度 创建一个全屏遮罩层,通过 CSS 固定定位覆盖整个视口,并设置半透明背景色。 <template> <div cl…