当前位置:首页 > VUE

vue实现条件查询

2026-02-17 05:23:34VUE

Vue 实现条件查询的方法

在 Vue 中实现条件查询通常需要结合表单输入、数据绑定和过滤逻辑。以下是几种常见的实现方式:

vue实现条件查询

使用计算属性过滤数据

<template>
  <input v-model="searchQuery" placeholder="搜索...">
  <ul>
    <li v-for="item in filteredItems" :key="item.id">
      {{ item.name }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    }
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      )
    }
  }
}
</script>

使用 watch 监听查询条件变化

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [],
      filteredItems: []
    }
  },
  watch: {
    searchQuery(newVal) {
      this.filterItems(newVal)
    }
  },
  methods: {
    filterItems(query) {
      this.filteredItems = this.items.filter(item =>
        item.name.toLowerCase().includes(query.toLowerCase())
      )
    }
  }
}
</script>

结合多个查询条件

<template>
  <input v-model="filters.name" placeholder="名称">
  <input v-model="filters.price" type="number" placeholder="价格">
  <ul>
    <li v-for="product in filteredProducts" :key="product.id">
      {{ product.name }} - {{ product.price }}
    </li>
  </ul>
</template>

<script>
export default {
  data() {
    return {
      filters: {
        name: '',
        price: null
      },
      products: [
        { id: 1, name: '手机', price: 1999 },
        { id: 2, name: '电脑', price: 5999 }
      ]
    }
  },
  computed: {
    filteredProducts() {
      return this.products.filter(product => {
        const nameMatch = product.name.toLowerCase().includes(
          this.filters.name.toLowerCase()
        )
        const priceMatch = this.filters.price 
          ? product.price <= this.filters.price 
          : true
        return nameMatch && priceMatch
      })
    }
  }
}
</script>

使用第三方库实现高级搜索

对于更复杂的搜索需求,可以考虑使用 Fuse.js 等模糊搜索库:

import Fuse from 'fuse.js'

export default {
  data() {
    return {
      search: '',
      list: [...],
      fuseOptions: {
        keys: ['name', 'description'],
        threshold: 0.4
      }
    }
  },
  computed: {
    searchResults() {
      if (!this.search) return this.list
      const fuse = new Fuse(this.list, this.fuseOptions)
      return fuse.search(this.search).map(result => result.item)
    }
  }
}

服务器端条件查询

当数据量较大时,应该考虑将查询条件发送到后端:

methods: {
  async searchItems() {
    const params = {
      keyword: this.searchQuery,
      page: this.currentPage
    }
    const response = await axios.get('/api/items', { params })
    this.items = response.data
  }
}

以上方法可以根据具体需求选择使用,计算属性方式适合前端过滤少量数据,而服务器端查询适合大数据量场景。

vue实现条件查询

标签: 条件vue
分享给朋友:

相关文章

vue实现简单的弹窗

vue实现简单的弹窗

使用 Vue 实现简单弹窗 组件基础结构 创建一个名为 Modal.vue 的组件文件,包含模板、脚本和样式部分: <template> <div class="modal-…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue插槽实现

vue插槽实现

插槽的基本概念 Vue插槽(Slot)是一种内容分发机制,允许父组件向子组件传递模板片段,子组件通过<slot>标签定义接收位置。插槽的核心作用是增强组件的灵活性和复用性。 默认插槽…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template>…

vue实现表白

vue实现表白

Vue 实现表白页面 使用 Vue 可以快速创建一个动态、交互式的表白页面。以下是一个简单的实现方案: 基础结构 创建一个 Vue 项目或单文件组件,包含以下核心部分: <templat…

vue  实现tab

vue 实现tab

实现 Tab 切换功能 在 Vue 中实现 Tab 切换功能可以通过动态组件或条件渲染完成。以下是两种常见方法: 使用 v-if 或 v-show 实现条件渲染 通过绑定 currentTab 变…