Sortable — 是一个 JavaScript 库,用于在现代浏览器和触摸设备上对拖放列表进行重新排序。
一、elementUI排序功能实际案例
表格每一项中加上sortable,可以展示排序的小图标。
在列中设置sortable属性即可实现以该列为基准的排序,接受一个Boolean,默认为false。
如果需要后端排序,需将sortable设置为custom,同时在 Table 上监听sort-change事件,在事件回调中可以获取当前排序的字段名和排序顺序,从而向接口请求排序后的表格数据。
sort-change事件:当排序发生变化时触发该事件。
<el-table
v-loading="loading"
:row-class-name="setRowClass"
:cell-class-name="setCellClass"
:data="dataList.rows"
:header-cell-style="{background:'#F7F7F7'}"
border
style="width: 100%;"
// 监听sort-change事件
@sort-change="getAllProSort">
<el-table-column
prop="division_name"
label="部门名称"
header-align="center"
align="left"
min-width="35%"
>
<template slot-scope="scope">
<a style="color: #26A97D;text-decoration: underline;" @click="handleDept(scope.row)">{{ scope.row.division_name }}</a>
</template>
</el-table-column>
<el-table-column
prop="sales"
label="销售额"
header-align="center"
min-width="35%"
align="right"
// 将sortable设置为custom
sortable="custom"
>
<template slot-scope="scope">
<span>{{ formatData(scope.row.sales) }}</span>
</template>
</el-table-column>
getAllProSort(order) {
const that = this
if (order.order) {
that.order_par = order.prop + ' ' + order.order.substring(0, order.order.indexOf('n') - 1)
} else {
that.order_par = 'division_no'
}
that.getDeptMonthBudgetDetailData()
},
getDeptMonthBudgetDetailData() {
this.loading = true
this.par.order_par = this.order_par
this.par.data_type = this.scope
this.par.date_month = this.dataYearMonth
getDeptMonthBudgetDetail(this.par).then(res => {
if (res.status === 'succ' && res !== null) {
this.dataList = res.data
} else {
this.dataList = []
}
this.loading = false
}).catch(err => {
console.log(err.message)
// alert('数据获取失败,请重试!')
})
},
data() {
return {
scope: 'sales',
dataList: [],
total: [],
loading: false,
par: {},
date_start: '',
date_end: '',
// 初始化order_par
order_par: 'division_no desc'
}
},
二、 实例2
也可以通过 Table 的default-sort属性设置默认的排序列和排序顺序。可以使用sort-method或者sort-by使用自定义的排序规则。
在列中设置sortable属性即可实现以该列为基准的排序,接受一个Boolean,默认为false。可以通过 Table 的default-sort属性设置默认的排序列和排序顺序。可以使用sort-method或者sort-by使用自定义的排序规则。如果需要后端排序,需将sortable设置为custom,同时在 Table 上监听sort-change事件,在事件回调中可以获取当前排序的字段名和排序顺序,从而向接口请求排序后的表格数据。在本例中,我们还使用了formatter属性,它用于格式化指定列的值,接受一个Function,会传入两个参数:row和column,可以根据自己的需求进行处理。
<template>
<el-table
:data="tableData"
style="width: 100%"
:default-sort = "{prop: 'date', order: 'descending'}"
>
<el-table-column
prop="date"
label="日期"
sortable
width="180">
</el-table-column>
<el-table-column
prop="name"
label="姓名"
sortable
width="180">
</el-table-column>
<el-table-column
prop="address"
label="地址"
:formatter="formatter">
</el-table-column>
</el-table>
</template>
<script>
export default {
data() {
return {
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀区金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀区金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀区金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀区金沙江路 1516 弄'
}]
}
},
methods: {
formatter(row, column) {
return row.address;
}
}
}
</script>
三、 实例3
使用的default-sort属性:
取值为对象,设置表格数据的默认排序结果。
<el-table :default-sort=“{prop:‘age’,order:‘descending’}”>
prop设置排序字段,可以是没有实现可排序功能的字段。
参考文章Element UI排序
参考文章el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能,利用@sort-change实现动态数据排序,el-table排序方法,el-table可变数据的动态排序