当前位置:首页 > VUE

vue实现筛选列表

2026-01-16 23:42:33VUE

Vue 实现筛选列表的方法

数据绑定与列表渲染

使用 v-for 指令渲染原始列表,绑定到 data 中的数组。例如:

data() {
  return {
    items: [
      { id: 1, name: 'Apple', category: 'Fruit' },
      { id: 2, name: 'Carrot', category: 'Vegetable' }
    ],
    filterText: '',
    filterCategory: ''
  }
}

模板中渲染列表:

<ul>
  <li v-for="item in filteredItems" :key="item.id">
    {{ item.name }} ({{ item.category }})
  </li>
</ul>

计算属性实现筛选逻辑

通过 computed 动态计算筛选结果,避免直接修改原始数据:

computed: {
  filteredItems() {
    return this.items.filter(item => {
      const matchesText = item.name.toLowerCase().includes(
        this.filterText.toLowerCase()
      );
      const matchesCategory = this.filterCategory === '' || 
        item.category === this.filterCategory;
      return matchesText && matchesCategory;
    });
  }
}

添加筛选交互控件

在模板中添加输入框和下拉菜单:

<input 
  type="text" 
  v-model="filterText" 
  placeholder="Search by name...">

<select v-model="filterCategory">
  <option value="">All Categories</option>
  <option value="Fruit">Fruit</option>
  <option value="Vegetable">Vegetable</option>
</select>

优化性能

对于大数据量场景,可添加防抖处理:

data() {
  return {
    debounceTimeout: null
  }
},
methods: {
  handleInput() {
    clearTimeout(this.debounceTimeout);
    this.debounceTimeout = setTimeout(() => {
      this.filterText = event.target.value;
    }, 300);
  }
}

多条件筛选扩展

支持更复杂的筛选条件时,可扩展计算属性:

computed: {
  filteredItems() {
    return this.items.filter(item => {
      // 多个条件组合
      return (
        (this.filterConditions.priceMin === '' || 
         item.price >= this.filterConditions.priceMin) &&
        (this.filterConditions.inStock || 
         !this.filterConditions.inStockOnly)
      );
    });
  }
}

使用第三方库

对于复杂需求,可考虑使用专用库:

npm install lodash.debounce vue-multiselect

示例集成:

import debounce from 'lodash.debounce';
export default {
  methods: {
    handleInput: debounce(function(e) {
      this.filterText = e.target.value;
    }, 300)
  }
}

vue实现筛选列表

标签: 列表vue
分享给朋友:

相关文章

vue实现聊天

vue实现聊天

Vue实现聊天功能 基础项目结构搭建 使用Vue CLI或Vite创建项目,安装必要依赖如socket.io-client或axios(根据通信方式选择)。核心组件通常包括: ChatWindow…

vue循环数组实现

vue循环数组实现

vue循环数组的实现方法 在Vue中循环数组主要通过v-for指令实现,以下是几种常见用法: 基本数组循环 使用v-for指令遍历数组,可以通过(item, index)的语法获取当前项和索引值:…

前端多线程实现vue

前端多线程实现vue

前端多线程与Vue的结合 在Vue中实现多线程通常通过Web Worker技术完成。Web Worker允许在后台线程中运行脚本,避免阻塞主线程,适合处理计算密集型任务。 使用Web Worker的…

vue实现人脸识别比对

vue实现人脸识别比对

Vue 实现人脸识别比对的方法 使用现成的人脸识别 API 通过调用第三方人脸识别 API(如 Face++、百度 AI、腾讯云等)实现比对功能。注册开发者账号获取 API Key 和 Secret,…

vue实现页面截屏

vue实现页面截屏

使用html2canvas库实现截屏 html2canvas是一个流行的JavaScript库,可以将DOM元素转换为Canvas图像。在Vue项目中安装html2canvas: npm insta…

vue实现视频会议

vue实现视频会议

使用 Vue 实现视频会议 技术选型 Vue.js 作为前端框架,结合 WebRTC 技术实现实时音视频通信。常用的库包括: peerjs:简化 WebRTC 的点对点连接。 socket.io:…