Vue小模块之功能全面的表格筛选表格中的数据
Posted 究极死胖兽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue小模块之功能全面的表格筛选表格中的数据相关的知识,希望对你有一定的参考价值。
Vue小模块之功能全面的表格(三)筛选表格中的数据
技术栈
Vue全家桶:
前端框架 Vue.js
状态管理 Vuex
动态路由匹配 vue-router
http服务 axios
模块打包 webpack
UI框架 element
数据服务器
服务器端 node.js
基于node的web框架 express
分布式数据库 mongodb
mongodb工具 mongoose
学习计划状态过滤
暂时修改测试数据的status
列以便于测试
接下来对学习计划状态列进行美化
data()
return
data: [],
filterType: '',
statuses: ['未开始', '进行中', '搁置', '完成'],
// 新增
statusColors: ['info', 'primary', 'warning', 'success']
<el-table-column label="学习计划状态">
<template slot-scope="scope">
<el-tag :type="statusColors[scope.row.status]">statuses[scope.row.status]</el-tag>
</template>
</el-table-column>
为下拉选择框添加选项
<!-- 过滤条件区 -->
<template slot="filter-field">
<!-- 状态过滤框 -->
<el-select v-model="filterType" placeholder="选择类型">
<el-option label="全部" value=""></el-option>
<el-option v-for="status, index in statuses" :key="status" :label="status" :value="index"></el-option>
</el-select>
<!-- 时间过滤框 -->
<el-date-picker type="daterange" start-placeholder="起始时间" end-placeholder="结束时间"></el-date-picker>
</template>
为组件添加计算属性实现过滤
export default
// ...
computed:
filtedData()
return this.data.filter((item) =>
return this.filterType === '' || item.status === this.filterType
)
最后将表格数据源修改为过滤后的数据
<el-table :data="filtedData">
//...
</el-table>
效果如下:
、
学习完成时间过滤
将时间过滤框的值与filterDates
进行绑定
<!-- 时间过滤框 -->
<el-date-picker v-model="filterDates" type="daterange" start-placeholder="起始时间" end-placeholder="结束时间"></el-date-picker>
data()
return
data: [],
filterType: '',
filterDates: null, // 新增
statuses: ['未开始', '进行中', '搁置', '完成'],
statusColors: ['info', 'primary', 'warning', 'success']
,
修改计算属性filtedData
computed:
filtedData()
return this.data.filter((item) =>
return this.filterType === '' || item.status === this.filterType
).filter((item) =>
return !this.filterDates || (this.filterDates[0] <= new Date(item.completeDate) && this.filterDates[1] >= new Date(item.completeDate))
)
搜索框过滤
将搜索框的值与searchStr
进行绑定
<!-- 搜索框 -->
<template slot="search-field">
<el-input v-model="searchStr" suffix-icon="el-icon-search" placeholder="请输入搜索内容"></el-input>
</template>
data()
return
data: [],
searchStr: '', // 新增
filterType: '',
filterDates: null,
statuses: ['未开始', '进行中', '搁置', '完成'],
statusColors: ['info', 'primary', 'warning', 'success']
,
修改计算属性filtedData
,需要注意的是,最好将新增的搜索框过滤加到最前面,因为多条件过滤时,为提高性能,最好将越严格的过滤条件放到越前面。
computed:
filtedData()
return this.data.filter((item) =>
var reg = new RegExp(this.searchStr, 'i')
return !this.searchStr || reg.test(item.name) || reg.test(item.author.join(' '))
).filter((item) =>
return this.filterType === '' || item.status === this.filterType
).filter((item) =>
return !this.filterDates || (this.filterDates[0] <= new Date(item.completeDate) && this.filterDates[1] >= new Date(item.completeDate))
)
现在可以通过输入书籍的名字和作者来进行过滤筛选
小结
本阶段实现了表格的过滤筛选功能,下个阶段将实现表格数据的排序和分页
以上是关于Vue小模块之功能全面的表格筛选表格中的数据的主要内容,如果未能解决你的问题,请参考以下文章