如何使用vue和Element-plus实现数据的筛选和统计

1.简介

Vue.js是一个JavaScript框架,可以完美实现数据的动态绑定和交互操作,非常适用于前端开发。Element-plus是一套基于Vue.js的组件库,提供了各种常用的UI组件,开发者可以轻松构建优秀的Web应用程序。

本文介绍如何使用Vue.js和Element-plus实现数据的筛选和统计。

2.要求

本文假设您已经拥有了Vue.js和Element-plus的基础知识,如果您还不了解这两个框架,请先学习相关知识。

本文将使用JSON数据作为例子,并通过Vue.js和Element-plus实现数据的筛选和统计功能。

3.JSON数据

3.1 数据结构

假设我们有一个JSON数据,包含多个员工的信息:

{

"employees": [

{

"name": "John Doe",

"gender": "Male",

"age": 32,

"salary": 50000

},

{

"name": "Jane Doe",

"gender": "Female",

"age": 28,

"salary": 40000

},

{

"name": "Peter Parker",

"gender": "Male",

"age": 25,

"salary": 35000

},

{

"name": "Mary Jane",

"gender": "Female",

"age": 26,

"salary": 45000

}

]

}

该数据结构包含一个名为"employees"的数组,每个员工包含以下信息:

name:员工姓名

gender:员工性别

age:员工年龄

salary:员工薪资

我们将使用该数据结构进行数据的筛选和统计操作。

4.Vue.js代码

4.1 组件

我们可以将数据筛选和统计功能封装成一个Vue.js组件:

<template>

<div>

<el-input v-model="search" placeholder="请输入关键字进行搜索"></el-input>

<el-table :data="filteredData">

<el-table-column prop="name" label="姓名"></el-table-column>

<el-table-column prop="gender" label="性别"></el-table-column>

<el-table-column prop="age" label="年龄"></el-table-column>

<el-table-column prop="salary" label="薪资"></el-table-column>

</el-table>

<p>平均薪资:<strong>{{averageSalary}}</strong></p>

<p>男性员工数量:<strong>{{maleCount}}</strong></p>

<p>女性员工数量:<strong>{{femaleCount}}</strong></p>

</div>

</template>

<script>

export default {

data() {

return {

search: '',

data: [

{

name: 'John Doe',

gender: 'Male',

age: 32,

salary: 50000

},

{

name: 'Jane Doe',

gender: 'Female',

age: 28,

salary: 40000

},

{

name: 'Peter Parker',

gender: 'Male',

age: 25,

salary: 35000

},

{

name: 'Mary Jane',

gender: 'Female',

age: 26,

salary: 45000

}

]

}

},

computed: {

filteredData() {

return this.data.filter(item => {

return item.name.includes(this.search)

})

},

maleCount() {

return this.data.filter(item => {

return item.gender === 'Male'

}).length

},

femaleCount() {

return this.data.filter(item => {

return item.gender === 'Female'

}).length

},

averageSalary() {

let sum = 0

this.data.forEach(item => {

sum += item.salary

})

return (sum / this.data.length).toFixed(2)

}

}

}

</script>

该组件包含以下功能:

el-input组件:用于输入关键字进行搜索

el-table组件:用于展示筛选后的数据

平均薪资:用于统计所有员工的平均薪资

男性员工数量:用于统计所有男性员工的数量

女性员工数量:用于统计所有女性员工的数量

使用computed属性实现数据筛选和统计功能,computed属性可以根据data的变化自动更新显示。

4.2 注册组件

在Vue.js中需要将组件注册到Vue实例中才能使用:

import Vue from 'vue'

import App from './App.vue'

import ElementPlus from 'element-plus'

import 'element-plus/dist/index.css'

Vue.use(ElementPlus)

Vue.config.productionTip = false

new Vue({

render: h => h(App),

}).$mount('#app')

使用Vue.use(ElementPlus)将Element-plus注册到Vue实例中。

4.3 渲染组件

在HTML页面中渲染该组件:

<body>

<div id="app">

<my-component></my-component>

</div>

<script src="./main.js"></script>

</body>

其中my-component是前面定义的组件名。

5.Element-plus代码

5.1 el-input组件

使用el-input组件实现输入框:

<el-input v-model="search" placeholder="请输入关键字进行搜索"></el-input>

其中v-model绑定了search,使得输入框中输入的内容自动保存到search中。

5.2 el-table组件

使用el-table组件实现表格:

<el-table :data="filteredData">

<el-table-column prop="name" label="姓名"></el-table-column>

<el-table-column prop="gender" label="性别"></el-table-column>

<el-table-column prop="age" label="年龄"></el-table-column>

<el-table-column prop="salary" label="薪资"></el-table-column>

</el-table>

其中:data绑定了filteredData,使得表格中显示的内容为筛选后的数据。

5.3 el-table-column组件

使用el-table-column组件实现表格的列:

<el-table-column prop="name" label="姓名"></el-table-column>

<el-table-column prop="gender" label="性别"></el-table-column>

<el-table-column prop="age" label="年龄"></el-table-column>

<el-table-column prop="salary" label="薪资"></el-table-column>

其中prop绑定了数据结构中的属性,label定义了列的名字。

5.4 el-table组件的属性

el-table组件还有很多属性可以配置,例如:

stripe:是否显示斑马线表格

border:是否显示表格边框

height:表格高度

max-height:表格最大高度

highlight-current-row:是否高亮当前行

row-class-name:设置行的样式

5.5 el-table的方法

el-table组件还有很多方法可以调用,例如:

getCurrentRow():获取当前行的数据

clearSelection():清空已选择的行

toggleRowSelection(row, selected):选择/取消选择指定行

6.总结

使用Vue.js和Element-plus可以轻松实现数据的筛选和统计,开发者可以根据自己的需求灵活使用这些功能。