vue实用组件——表格
之前用了一下vue-bootstrap,感觉里面的表格组件特别好用,但是如果仅仅为了使用表格就引入bootstrap,似乎有点不划算。所以自己就试着实现了一下bootstrap里面表格的部分功能,目前只是实现了表格内容的排版和列排序功能。后面再慢慢实现更多的功能吧,比如详情框等等。
另外说一点点个人对bootstrap的使用感受吧,它的便捷是有目共睹的,能快速搭建好项目UI,排版也很优雅好看,但是不太适用于已定好UI设计稿的项目,因为它的布局是很灵活的,在排版上,尺寸大致能遵循设计稿,但是不能较真,如果非要和设计稿保持一致,排版尺寸还原精确到1个像素的话,bootstrap的便捷性就要大打折扣了,因为会有大量的样式需要覆盖。
效果如下:

父组件需传递的数据格式如下:

代码如下:
<template>
<div class="d-table">
<ul class="listheader">
<li v-for="(it, key) in fields" :key="key">
<span
:class="{'up': sortField === key && sortrole > 0,'down': sortField === key && sortrole < 0}"
v-if="it.sort"
class='sort'
@click.capture="switchSort(key)"
><slot :name="key + '_H'" :data="{field: it, colum: key}">{{ $t(it.label) | cap }}</slot></span>
<span v-else><slot :name="key + '_H'" :data="{field: it, colum: key}">{{ $t(it.label) | cap }}</slot></span>
</li>
</ul>
<div class="listbody">
<div v-for="(it, i) in list" @click="rowClick(i, it)" :key="i">
<ul>
<li v-for="n in keys.length" :key="n">
<slot :name="keys[n-1]" :data="unitedata(i, it, n)">{{ it[keys[n-1]] }}</slot>
</li>
</ul>
</div>
</div>
</div>
</template> <script> export default {
props: {
items: {
type: Array,
default: () => ([])
},
fields: {
type: Object,
default: () => ({})
},
sortBy: {
type: String,
default: ''
}
},
data () {
return {
sortrole: 1,
sortField: this.sortBy,
detailshowIndex: -1
}
},
computed: {
keys () {
return Object.keys(this.fields)
},
list () {
const arr = this.items
if (this.sortField) {
const str = String(this.items[0][this.sortField]).charAt(0)
if (isNaN(str) && str !== '-' && str !== '+') {
arr.sort((x, y) => { // 当x[this.sortField]为对象时,未做判断处理
return this.sortrole * x[this.sortField].localeCompare(y[this.sortField])
})
} else {
arr.sort((x, y) => {
return this.sortrole * (x[this.sortField] - y[this.sortField])
})
}
}
const len = arr.length
for (let i = 0; i < len; i++) {
arr[i].detailShowing = false
}
return arr
}
},
mounted () {
},
methods: {
rowClick (i, it) {
this.$emit('rowClick', i, it)
},
unitedata (index, item, n) { // params: 当前行数,当前行的数据包(Object), 当前行的列数
let obj = { index, item }
obj.field = this.fields[this.keys[n - 1]]
obj.value = item[this.keys[n - 1]]
return obj
},
switchSort (key) {
let ele = event.target
while (ele.parentNode.tagName !== 'LI') {
ele = ele.parentNode
}
if (ele.classList.value.indexOf('up') > -1) {
this.sortrole = -1
} else {
this.sortrole = 1
}
this.sortField = key
}
}
}
</script> <style scoped lang="scss">
.d-table {
background-color: #fff;
padding: 10px 0;
.listheader {
border-bottom: 1px solid #b7b7b7;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
padding: 0 10px;
&>li {
font-weight: bold;
width: 16.5%;
overflow: hidden;
padding: 10px 0;
span.sort {
cursor: pointer;
position: relative;
&:before, &:after {
position: absolute;
right: -16px;
content: '';
display: inline-block;
border-right: 6px solid transparent;
border-left: 6px solid transparent;
}
&:before {
border-top: 6px solid #ababab;
top: 12px;
}
&:after {
border-bottom: 6px solid #ababab;
top: 5px;
}
&.down {
&:before {
border-top: 6px solid #21a185;
}
}
&.up {
&:after {
border-bottom: 6px solid #21a185;
}
}
}
}
}
.listbody {
&>div {
&:hover {
background-color: #f0f0f0;
}
&:first-child {
margin-top: 0;
}
ul {
padding: 0 10px;
display: flex;
justify-content: space-between;
li {
width: 16.5%;
overflow: hidden;
padding: 10px 0;
}
}
}
}
}
</style> 可能存在谬误,欢迎指正,不胜感激!
vue实用组件——表格的更多相关文章
- vue实用组件——圆环百分比进度条
因为所在公司临近年底突然宣布Game Over,导致我等小码农又要踏上一个艰辛的求职道路了.才眨眼功夫,年就过完了,快乐的时光总是很匆忙呀. 开年的第一个面试,面试官问我会不会自己写一个圆环进图圈,这 ...
- vue实用组件——页面公共头部
可伸缩自适应的页面头部,屏幕适应范围更广泛 效果如下: 代码如下: <template> <div class="site-header"> <div ...
- vue iview组件表格 render函数的使用
如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到 attrs 来加入而不是props { title: '操作', key: 'action', align: 'c ...
- 应用五:Vue之ElementUI 表格Table与分页Pagination组件化
(注:本文适用于有一定Vue基础或开发经验的读者,文章就知识点的讲解不一定全面,但却是开发过程中很实用的) 在平时的web项目开发过程中,列表分页查询展示应用的很频繁,为了便于阅读并减少代码的冗余,所 ...
- 基于Vue.js的表格分页组件
有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更一篇文章,分享一个自己编写的一个Vue的小组件,名叫BootPage. 不了解Vue.js的童鞋 ...
- Vue.js的表格分页组件
转自:http://www.cnblogs.com/Leo_wl/p/5522299.html 有一段时间没更新文章了,主要是因为自己一直在忙着学习新的东西而忘记分享了,实在惭愧. 这不,大半夜发文更 ...
- 16款优秀的Vue UI组件库推荐
16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可.在公司的Web前端项目开发中,多个项目采用基 ...
- Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例 element ★11612 - 饿了么出品的Vue2的web UI工具套件 Vux ★7503 - 基于Vue和WeUI的组件库 ...
- vue统计组件库和ui框架
UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和WeUI的组件库 iview ★6634 - 基于 Vuejs 的开源 UI ...
随机推荐
- Android-WebView与本地HTML (互调)
此篇博客是基于,上两篇博客,Android-WebView与本地HTML (HTML调用-->Java的方法) , Android-WebView与本地HTML (Java调用--->HT ...
- java的环境变量
Java学习第一步——JDK安装及Java环境变量配置 2014-05-30 9:09 Java SE 阿超 9226 views Java作为当下很主流的编程语言,学习Java的朋友也越来越 ...
- Redis数据库介绍
引言 redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. redis数据结构 redis是一种高级的key:value存储系统,其中value支 ...
- [NewCoder 7] 用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 水题,直接上代码: class Solution { public: void push(int nod ...
- CentOS 7配置nginx-1.13.10支持http/2和Server Push
0.确保openssl版本大于1.0.2 openssl version 1.下载nginx-1.13.10 wget http://nginx.org/download/nginx-1.13.10. ...
- AngularJS指令封装高德地图组件
1 概述 公司移动门户原来是基于AngularJS指令封装的百度地图组件,用于签到.签退.定位等功能,在使用过程中发现百度地图频繁的弹出广告,所以打算重新引用其它地图组件,最后决定基于AngularJ ...
- XGBoost,GBDT原理详解,与lightgbm比较
xgb原理: https://www.jianshu.com/p/7467e616f227 https://blog.csdn.net/a819825294/article/details/51206 ...
- urllib2 的使用与介绍
爬虫简介 什么是爬虫? 爬虫:就是抓取网页数据的程序. HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的 ...
- 机器学习基石笔记:16 Three Learning Principles
三个理论上界: 三个线性模型: 三个关键工具: 三条学习规则: 1.奥卡姆剃刀定律 先从简单模型开始, 训练后出现欠拟合, 再尝试复杂点模型. 2.采样误差 训练.验证.测试数据尽量同分布. 3.数据 ...
- Vue2.5开发去哪儿网App 第二章笔记
Vue完成 TodoList 1.默认方式 <!DOCTYPE html> <html lang="en"> <head> <meta ...