当前位置:首页 > VUE

vue实现搜索分页

2026-02-17 21:38:30VUE

Vue 实现搜索分页

数据绑定与搜索逻辑

在 Vue 中实现搜索分页功能,需要将搜索关键词与分页参数绑定到数据模型中。通常使用 v-model 绑定搜索输入框,分页参数(如 currentPagepageSize)可通过计算属性或直接绑定。

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索关键词" @input="handleSearch" />
    <table>
      <tr v-for="item in paginatedData" :key="item.id">
        <td>{{ item.name }}</td>
      </tr>
    </table>
    <button @click="prevPage" :disabled="currentPage === 1">上一页</button>
    <span>{{ currentPage }} / {{ totalPages }}</span>
    <button @click="nextPage" :disabled="currentPage === totalPages">下一页</button>
  </div>
</template>

计算分页数据

通过计算属性过滤搜索数据并分页。使用 filter 方法根据搜索关键词筛选数据,再通过 slice 方法实现分页。

<script>
export default {
  data() {
    return {
      searchQuery: '',
      currentPage: 1,
      pageSize: 10,
      allData: [] // 原始数据
    };
  },
  computed: {
    filteredData() {
      return this.allData.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    },
    totalPages() {
      return Math.ceil(this.filteredData.length / this.pageSize);
    },
    paginatedData() {
      const start = (this.currentPage - 1) * this.pageSize;
      const end = start + this.pageSize;
      return this.filteredData.slice(start, end);
    }
  },
  methods: {
    handleSearch() {
      this.currentPage = 1; // 搜索时重置到第一页
    },
    prevPage() {
      if (this.currentPage > 1) this.currentPage--;
    },
    nextPage() {
      if (this.currentPage < this.totalPages) this.currentPage++;
    }
  }
};
</script>

后端分页与 API 集成

如果数据量较大,建议将分页和搜索逻辑交给后端处理。通过 API 传递搜索关键词和分页参数,后端返回分页后的数据。

methods: {
  async fetchData() {
    const params = {
      query: this.searchQuery,
      page: this.currentPage,
      size: this.pageSize
    };
    const response = await axios.get('/api/data', { params });
    this.paginatedData = response.data.items;
    this.totalPages = response.data.totalPages;
  },
  handleSearch() {
    this.currentPage = 1;
    this.fetchData();
  }
}

使用分页组件库

对于更复杂的分页需求,可以集成第三方分页组件(如 element-uiant-design-vue),直接绑定分页事件和参数。

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

性能优化

对于前端分页,当数据量较大时,可使用虚拟滚动(如 vue-virtual-scroller)减少 DOM 渲染压力。对于后端分页,确保 API 响应速度,合理设置缓存策略。

vue实现搜索分页

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

相关文章

vue实现store

vue实现store

Vue 实现 Store 在 Vue 中,可以通过 Vuex 或 Pinia 实现全局状态管理(Store)。以下是两种主流方案的实现方法。 使用 Vuex 实现 Store Vuex 是 Vu…

vue实现visual

vue实现visual

Vue 实现可视化(Visual)的常见方法 在 Vue 中实现可视化通常涉及数据可视化库的集成,以下是几种主流方案: 使用 ECharts ECharts 是一个强大的 JavaScript…

实现vue模版

实现vue模版

Vue 模板的基本结构 Vue 模板基于 HTML 语法,通过 Vue 的指令和插值实现动态渲染。以下是一个基础模板示例: <template> <div id="app…

vue实现语音

vue实现语音

Vue 实现语音功能的方法 使用 Web Speech API Vue 可以结合 Web Speech API 实现语音识别和合成功能。Web Speech API 包含 SpeechRecognit…

vue实现详情

vue实现详情

Vue 实现详情页的常见方法 使用动态路由 在 Vue Router 中配置动态路由参数,通过 $route.params 获取详情 ID。示例路由配置: { path: '/detail/:i…

vue实现批量

vue实现批量

Vue 实现批量操作的方法 在 Vue 中实现批量操作通常涉及选择多个项目并执行统一处理,例如批量删除、批量更新等。以下是几种常见实现方式: 表格多选批量操作 使用 el-table 配合复选框实…