Vue2+ElementUI:用计算属性实现搜索框功能

前言:

本文代码使用vue2+element UI。

输入框搜索的功能,可以在前端通过计算属性过滤实现,也可以调用后端写好的接口。本文介绍的是通过计算属性对表格数据实时过滤,后附完整代码,代码中提供的是死数据,可供学习使用。

效果展示:

完整代码:

javascript 复制代码
<template>
  <div class="container">
    <h1 class="page-title">兴奋剂系统数据展示</h1>

    <!-- 搜索框 -->
    <el-input
      v-model="searchTerm"
      placeholder="搜索单位、姓名或身份证号"
      prefix-icon="el-icon-search"
      clearable
      class="search-input"
    >
    </el-input>

    <!-- 数据表格 -->
    <el-table :data="filteredData" border="">
      <el-table-column prop="unit" label="单位" width="150"></el-table-column>
      <el-table-column prop="name" label="姓名" width="120"></el-table-column>
      <el-table-column prop="idNumber" label="身份证号"></el-table-column>
    </el-table>

    <!-- 没有数据时显示 -->
    <div v-if="filteredData.length === 0" class="empty-message">
      没有找到匹配的结果
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      searchTerm: "",
      mockImportedData: [
        { unit: "北京队", name: "张三", idNumber: "110101199001011234" },
        { unit: "上海队", name: "李四", idNumber: "310101199203033456" },
        { unit: "广州队", name: "王五", idNumber: "440101199405055678" },
        { unit: "深圳队", name: "赵六", idNumber: "440301199607077890" },
        { unit: "北京队", name: "刘七", idNumber: "110101199809099012" },
      ],
    };
  },
  computed: {
    filteredData() {
      const lowercasedSearch = this.searchTerm.toLowerCase();
      return this.mockImportedData.filter(
        (item) =>
          item.unit.toLowerCase().includes(lowercasedSearch) ||
          item.name.toLowerCase().includes(lowercasedSearch) ||
          item.idNumber.includes(this.searchTerm)
      );
    },
  },
};
</script>

<style lang="scss" scoped>
/* 容器整体样式 */
.container {
  padding: 15px;

  .page-title {
    font-size: 24px;
    font-weight: bold;
    margin: 5px 0;
  }
  .search-input {
    padding: 10px 0;
    margin-bottom: 10px;
  }

  /* 表格容器样式 */
  .table-wrapper {
    margin-top: 20px;
  }

  /* 空结果提示 */
  .empty-message {
    text-align: center;
    margin-top: 20px;
    color: #a0aec0;
  }
}
</style>

知识点:

  1. 数组的filter()方法:

上述代码中filter() 方法会遍历 mockImportedData 中的每个数据项,对每一项执行回调函数进行判断,满足以下任意一个条件,才会保留在数组中。

2.空字符串匹配逻辑

在 JavaScript 中,任何字符串调用 .includes("") 都会返回 true。

这意味着空字符串会被视为"包含在任何字符串中"。

所以①当用户不输入任何数据,即searchTerm为空时,filter()返回原始的mockImportedData数组,即不做任何筛选,返回全部数据;

②当用户输入数据时,则进行匹配过滤。

相关推荐
excel7 小时前
研究 Vue 3 源码的收获
前端·vue.js
lerhxx9 小时前
AI 应用如何高效优雅地恢复中断?—— "连接解耦 + 状态持久化"
前端·javascript
mantou13210 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
默_笙10 小时前
🍕 一个主编、三个工种、两本手册:搭一支 AI 调研队
前端·javascript
CappuccinoRose11 小时前
FormData数据处理
开发语言·前端·javascript·表单数据
飘尘12 小时前
SVG和Canvas,前端里的两支“画笔”,用的时候怎么选择?
前端·javascript·面试
vx-程序开发14 小时前
【计算机毕设】51300童装超市管理系统的设计与实现
java·vue.js·spring boot·源码·课程设计·毕设·大作业
ym hyd 11115 小时前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
Sand(ContextGate)16 小时前
Python Agent 测试实战:测试与评估,让 Agent 像传统软件一样可交付
前端·javascript·python·microsoft·ai
码艺-Alimjan16 小时前
Tauri 网站To桌面应用实战总结
前端·javascript·vue