当前位置:首页 > VUE

vue实现筛选搜索框

2026-01-20 14:22:35VUE

Vue 实现筛选搜索框

数据绑定与输入处理

在 Vue 中实现筛选搜索框,首先需要绑定输入框的数据到组件的状态。使用 v-model 可以实现双向绑定,监听用户输入。

<template>
  <div>
    <input 
      v-model="searchQuery" 
      placeholder="输入关键词筛选"
    />
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchQuery: '',
      items: [
        { id: 1, name: '苹果' },
        { id: 2, name: '香蕉' },
        { id: 3, name: '橙子' }
      ]
    };
  }
};
</script>

计算属性实现筛选逻辑

通过计算属性动态过滤数据,避免直接在模板中写复杂逻辑。计算属性会根据依赖的响应式数据自动更新。

<script>
export default {
  computed: {
    filteredItems() {
      return this.items.filter(item => 
        item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
      );
    }
  }
};
</script>

渲染筛选结果

将计算属性返回的筛选结果渲染到页面,通常结合 v-for 指令实现列表展示。

<template>
  <div>
    <input 
      v-model="searchQuery" 
      placeholder="输入关键词筛选"
    />
    <ul>
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

优化性能与用户体验

对于大数据量或复杂筛选逻辑,可以加入防抖(debounce)减少频繁计算。使用 Lodash 的 _.debounce 或自定义实现。

methods: {
  debouncedSearch: _.debounce(function() {
    this.filteredItems = this.items.filter(item =>
      item.name.toLowerCase().includes(this.searchQuery.toLowerCase())
    );
  }, 300)
},
watch: {
  searchQuery() {
    this.debouncedSearch();
  }
}

多条件筛选扩展

若需支持多字段筛选,可以扩展计算属性逻辑,结合多个条件判断。

computed: {
  filteredItems() {
    return this.items.filter(item => {
      const matchesName = item.name.toLowerCase().includes(this.searchQuery.toLowerCase());
      const matchesCategory = item.category.toLowerCase().includes(this.categoryQuery.toLowerCase());
      return matchesName && matchesCategory;
    });
  }
}

样式与交互增强

通过 CSS 美化搜索框和筛选结果,例如添加加载状态、无结果提示等,提升用户体验。

<template>
  <div class="search-container">
    <input 
      v-model="searchQuery" 
      class="search-input"
      placeholder="输入关键词筛选"
    />
    <div v-if="filteredItems.length === 0" class="no-results">
      无匹配结果
    </div>
    <ul class="results-list">
      <li v-for="item in filteredItems" :key="item.id">
        {{ item.name }}
      </li>
    </ul>
  </div>
</template>

<style>
.search-input {
  padding: 8px;
  width: 100%;
  border: 1px solid #ccc;
}
.no-results {
  color: #999;
  padding: 10px;
}
</style>

服务端筛选集成

对于大数据量,可将筛选逻辑移至服务端,通过 API 请求获取结果。使用 axiosfetch 发送请求。

vue实现筛选搜索框

methods: {
  async fetchFilteredItems() {
    const response = await axios.get('/api/items', {
      params: { search: this.searchQuery }
    });
    this.filteredItems = response.data;
  }
},
watch: {
  searchQuery() {
    this.fetchFilteredItems();
  }
}

以上方法涵盖了从基础到进阶的 Vue 筛选搜索框实现,可根据实际需求选择或组合使用。

标签: vue
分享给朋友:

相关文章

vue 实现复选

vue 实现复选

Vue 实现复选功能 在 Vue 中实现复选功能可以通过多种方式完成,以下是常见的几种方法: 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集用户选择的复选框值。…

vue element实现

vue element实现

Vue Element UI 实现 Vue Element UI 是基于 Vue.js 的组件库,提供丰富的 UI 组件,适合快速开发企业级中后台产品。以下是一些关键实现方法和步骤: 安装 Vue…

vue实现bootstrap

vue实现bootstrap

Vue 中集成 Bootstrap 的方法 在 Vue 项目中集成 Bootstrap 可以通过以下方式实现,涵盖样式、组件和交互功能。 安装 Bootstrap 依赖 通过 npm 或 yarn…

vue页面实现

vue页面实现

Vue 页面实现方法 创建 Vue 组件 使用 Vue 单文件组件(SFC)方式创建页面,文件扩展名为 .vue。一个基本的 Vue 组件包含三个部分:模板(template)、脚本(script)和…

vue实现RTMP

vue实现RTMP

Vue 中实现 RTMP 流播放 RTMP(Real-Time Messaging Protocol)是一种用于实时音视频流传输的协议。在 Vue 中实现 RTMP 播放通常需要借助第三方库或播放器。…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…