热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[Vue]如何实现一个简单的表格数据筛选查找(根据ElementUI表格展示)(数组筛选)

[Vue]如何实现一个简单的表格数据筛选查找(根据ElementUI表格展示

[Vue]如何实现一个简单的表格数据筛选查找 (根据ElementUI表格展示)(数组筛选)

能够解决的问题

  • 在一个完整的数据数据渲染的 elementui 表格组件中,筛选输出数据

目录

  • 布局代码 样式代码 vue代码
  • 布局展示
  • 功能实现
  • 逻辑解析

布局代码


  • 样式代码

*{margin:0;padding:0;}
#app{
background:#ccc;
}
.header{
width:100%;
margin-bottom:30px;
}
.content{
padding-left:30px;
}
.row1{
height:60px;line-height:60px;margin:10px 0;
}
.eltable1{
overflow: scroll;
}

  • js[Vue]代码

import comtitle from "./children/comtitle";
// 这里是我自定义的组件!不要复制
export default {
name: "demo2",
data(){
return{
studentsList:[],
studentsNewList:[],
inputName:'',
inputId:null,
options:[
{value:0,label:'全部'},
{value:1,label:'男'},
{value:2,label:'女'}
],
value:0
}
},
methods:{
getStudentsNum() {
this.$axios.get('http://127.0.0.1:9091/getall').then(result => {
this.studentsNewList = this.studentsList = result.data
}).catch(err => {
console.log(err)
})
},
searchId(keywords) {
return this.studentsList.filter(item =>{
if(item.id == keywords) {
return item
}
})
},
searchName(keywords) {
return this.studentsList.filter(item =>{
if(item.name.includes(keywords)){
return item
}
})
},
searchsex(keywords) {
return this.studentsList.filter(item =>{
if(item.sex.includes(keywords)){
return item
}
})
},
numberToSex(num){
return num==1?'男':'女'
}
},
created() {
this.getStudentsNum()
},
watch:{
inputId: function(val) {
if(val == ''){
this.studentsNewList = this.studentsList
}else{
this.studentsNewList = this.searchId(val)
}
},
inputName: function(val) {
if(val == ''){
this.studentsNewList = this.studentsList
}else{
this.studentsNewList = this.searchName(val)
}
},
value: function(val) {
if(val == 0){
this.studentsNewList = this.studentsList
}else{
this.studentsNewList = this.searchsex(this.numberToSex(val))
}
}
},
components:{
comtitle // 自定义的组件,与本文无关
}
}

布局效果

功能实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

逻辑解析

0. 数组数据类型

{id:1,name:‘余强’,sex:‘男’,ctime:new Date()},
{id:2,name:‘萧芳’,sex:‘女’,ctime:new Date()},

1. 使用 watch 监听三个输入框的变量变化

  • 我在事先将数据数据拷贝了两份,studentsNewList用来渲染数组,而studentsList作为原始数据方便恢复
  • 监听输入框的变化,如第一个:如果inputid绑定的数据发生变化,那么调用searchId事件,并将值作为参数传递;如果值变为空,那么将渲染数据恢复到原数据
  • 性别筛选与其他的不同是多了一个方法,这个方法负责将数字转为性别的文字

watch:{
inputId: function(val) {
if(val == ''){
this.studentsNewList = this.studentsList
}else{
this.studentsNewList = this.searchId(val)
}
},
inputName: function(val) {
if(val == ''){
this.studentsNewList = this.studentsList
}else{
this.studentsNewList = this.searchName(val)
}
},
value: function(val) {
if(val == 0){
this.studentsNewList = this.studentsList
}else{
// console.log(this.numberToSex(val))
this.studentsNewList = this.searchsex(this.numberToSex(val))
}
}
}

2. 事件处理 返回数据

  • getStudentsNum:这是我从后端获取数据的方法,请忽略
  • searchId : 直接从数组中筛选出 id=参数 的元素,返回这个元素
  • searchName : 使用includes()方法,将数组的元素与参数进行逐一匹配,检查是否包含该参数
  • searchSex : 返回数组中,性别与参数匹配的元素
  • numberToSex : 因为性别选择框的value是0或1或2,如果是0的话那么直接恢复原始数据,不会执行这个事件(详细请看上面);如果为1那么返回给调用者,如果不为1返回给调用者。(调用者接到返回值后会将此返回值作为参数,调用searchSex方法,具体请看上方代码)

getStudentsNum() {
this.$axios.get('http://127.0.0.1:9091/getall').then(result => {
// console.log(result)
this.studentsNewList = this.studentsList = result.data
}).catch(err => {
console.log(err)
})
},
searchId(keywords) {
return this.studentsList.filter(item =>{
if(item.id == keywords) {
return item
}
})
},
searchName(keywords) {
return this.studentsList.filter(item =>{
if(item.name.includes(keywords)){
return item
}
})
},
searchsex(keywords) {
return this.studentsList.filter(item =>{
if(item.sex.includes(keywords)){
return item
}
})
},
numberToSex(num){
return num==1?'男':'女'
}

3. data中的数据解析

  • studentsListstudentsNewList最初都是原始数组数据,但不同的是studentsNewList直接渲染表格,也会被直接筛选用返回值渲染表格,而studentsList起到一个保存原始数据的作用
  • inputNameinputId都是输入框绑定变量
  • options数组是elementui选择框的数据需要,而value变量则用于接收它的选择结果

data(){
return{
studentsList:[],
studentsNewList:[],
inputName:'',
inputId:null,
options:[
{value:0,label:'全部'},
{value:1,label:'男'},
{value:2,label:'女'}
],
value:0
}
}

创作不易 感谢支持


推荐阅读
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 如何在PHP中获取数组中特定元素的索引位置
    在PHP中获取数组中特定元素的索引位置有多种方法。首先,可以使用 `array_search()` 函数,其语法为 `array_search(目标值, $array)`,该函数将返回匹配元素的第一个键名(即下标)。其次,也可以利用 `array_keys()` 函数,通过 `array_keys($array, 目标值)` 语法来获取所有匹配元素的键名列表。这两种方法都能有效解决数组元素定位的问题,具体选择取决于实际需求和性能考虑。 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 为了确保数据库的高效运行,本文介绍了一种方法,通过编写定时任务脚本来自动清理 `order` 表中状态为 0 或为空的无效订单记录。该脚本使用 PHP 编写,并设置时区为中国标准时间,每 10 分钟执行一次,以保持数据库的整洁和性能优化。此外,还详细介绍了如何配置定时任务以及脚本的具体实现步骤。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 优化Vite 1.0至2.0升级过程中遇到的某些代码块过大问题解决方案
    本文详细探讨了在将项目从 Vite 1.0 升级到 2.0 的过程中,如何解决某些代码块过大的问题。通过具体的编码示例,文章提供了全面的解决方案,帮助开发者有效优化打包性能。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
author-avatar
总是被姨妈折磨的吕孩纸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有