当前位置:首页 > VUE

vue搜索过后实现分页

2026-02-25 19:19:43VUE

实现Vue搜索与分页功能

搜索功能实现

在Vue组件中定义搜索方法,通常使用v-model绑定搜索输入框的值。通过计算属性或方法过滤数据列表。

<template>
  <input v-model="searchQuery" placeholder="搜索...">
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      allItems: [] // 原始数据
    }
  },
  computed: {
    filteredItems() {
      return this.allItems.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

分页功能实现

基于过滤后的结果实现分页逻辑,需要计算总页数和当前页显示的数据。

vue搜索过后实现分页

computed: {
  paginatedItems() {
    const start = (this.currentPage - 1) * this.itemsPerPage
    const end = start + this.itemsPerPage
    return this.filteredItems.slice(start, end)
  },
  totalPages() {
    return Math.ceil(this.filteredItems.length / this.itemsPerPage)
  }
}

完整组件示例

<template>
  <div>
    <input v-model="searchQuery" placeholder="搜索...">

    <ul>
      <li v-for="item in paginatedItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>

    <div class="pagination">
      <button 
        v-for="page in totalPages" 
        :key="page"
        @click="currentPage = page"
        :class="{ active: currentPage === page }"
      >
        {{ page }}
      </button>
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      currentPage: 1,
      itemsPerPage: 10,
      allItems: [
        { id: 1, name: '项目1' },
        { id: 2, name: '项目2' }
        // 更多数据...
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.allItems.filter(item =>
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    },
    paginatedItems() {
      const start = (this.currentPage - 1) * this.itemsPerPage
      const end = start + this.itemsPerPage
      return this.filteredItems.slice(start, end)
    },
    totalPages() {
      return Math.ceil(this.filteredItems.length / this.itemsPerPage)
    }
  }
}
</script>

<style>
.pagination button.active {
  font-weight: bold;
  color: blue;
}
</style>

优化建议

vue搜索过后实现分页

对于大型数据集,考虑使用后端分页和搜索。前端仅处理当前页的数据,减少内存使用。

methods: {
  async fetchData() {
    const response = await axios.get('/api/items', {
      params: {
        search: this.searchQuery,
        page: this.currentPage,
        perPage: this.itemsPerPage
      }
    })
    this.paginatedItems = response.data.items
    this.totalPages = response.data.totalPages
  }
}

注意事项

搜索和分页功能需要密切配合。搜索后应重置当前页码为1,避免显示空页。可以在搜索查询变化时添加监听:

watch: {
  searchQuery() {
    this.currentPage = 1
  }
}

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

相关文章

拖拽式编程vue实现

拖拽式编程vue实现

拖拽式编程在 Vue 中的实现方法 使用 HTML5 原生拖放 API Vue 可以结合 HTML5 的拖放 API 实现基础拖拽功能。通过 draggable 属性标记可拖拽元素,监听 dragst…

vue实现生成二维码

vue实现生成二维码

使用qrcode.vue库生成二维码 安装qrcode.vue库: npm install qrcode.vue --save 在Vue组件中使用: <template> <…

vue实现图库

vue实现图库

Vue 实现图库的基本方法 使用 Vue 实现图库功能可以通过多种方式完成,以下是一些常见的方法和实现步骤。 使用 Vue 和第三方库(如 Vue Gallery) 安装 vue-gallery 或…

vue 路由 实现

vue 路由 实现

Vue 路由实现方法 Vue Router 是 Vue.js 的官方路由管理器,用于构建单页面应用(SPA)。以下是实现 Vue 路由的详细步骤: 安装 Vue Router 通过 npm 或 ya…

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项目…

vue observer实现

vue observer实现

Vue Observer 实现原理 Vue 的响应式系统核心是通过 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现的 Observer 模式。以下是关键实现细…