# Table 表格 用于展示多条结构类似的数据, 可对数据进行排序等操作。 ::: warning 提示 `1.5.0`后取消了`height`的默认值,需要自行设置,最好设置为`number`类型,方便未来适配虚拟列表。 ::: ## 基础用法 通过`data`设置表格数据。 ::: details 基础用法 ```html ``` ```ts const dataList = reactive([ { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业' }, { name: '孔明', school: '武汉市阳逻卧龙学院', major: '计算机科学与技术专业' }, { name: '刘备', school: '武汉市阳逻编织学院', major: '计算机科学与技术专业' } ]) ``` ::: ## 固定列 通过`fixed`设置表格列是否固定展示,默认`false`。 :::warning 提示 目前仅支持固定在左侧,且固定列组件的排列顺序要和实际想要展示的顺序相同。 ::: ```html ``` ## 显示索引 通过`index`设置表格是否显示序号列,默认为`false`。同时也可以传入对象对序号列进行配置,参数同`TableColumnProps` ```html ``` ## 斑马纹 通过`stripe`设置表格是否展示斑马纹,默认`true`。 ```html ``` ## 边框 通过`border`设置表格是否展示边框,默认`true`。 ```html ``` ## 表格高度 通过`height`设置表格高度,设置高度后会自动固定表头。 ```html ``` ## 排序事件 当存在列参与排序时,点击会触发`sort-method`排序事件。 ```html ``` ```ts function handleSort(e) { console.log('这里是排序事件') } ``` ## 自定义列模板 自定义列的显示内容,可组合其他组件使用。 通过 `Scoped slot` 可以获取到 `row`, `index` 的数据,用法参考 demo。 ::: details 查看自定义列模版 demo ```html ``` ```ts import { ref } from 'vue' interface TableData { name: string school: string major: string gender: string graduation: string grade: number compare: string hobby: string } const dataList = ref([ { name: '张飞', school: '武汉市阳逻杀猪学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 56, compare: '10%', hobby: '燕人张飞在此!' }, { name: '关羽', school: '武汉市阳逻绿豆学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 66, compare: '11%', hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。' }, { name: '刘备', school: '武汉市阳逻编织学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 45, compare: '1%', hobby: '我得空明,如鱼得水也' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 69, compare: '14%', hobby: '子龙,子龙,世无双' }, { name: '孔明', school: '武汉市阳逻卧龙学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 88, compare: '21%', hobby: '兴汉讨贼,克复中原' }, { name: '姜维', school: '武汉市阳逻停水停电技术学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 87, compare: '32%', hobby: '我计不成,乃天命也!' } ]) /** * 排序 * @param e */ function handleSort(e) { dataList.value = dataList.value.reverse() } ``` ```css .custom-class { height: 80rpx; width: 220rpx; display: flex; flex-direction: col; align-items: center; } ``` ::: ## 不固定表头结合分页器使用 使用`pagination`组件,通过`v-model`绑定分页器当前页码,通过`total`设置分页器总条数,实现分页加载效果。 设置`fixed-header`为`false`,取消固定表头。 ::: details 查看结合分页器使用 demo ```html ``` ```ts interface TableData { name: string school: string major: string gender: string graduation: string grade: number compare: string hobby: string } const dataList = ref([ { name: '关羽', school: '武汉市阳逻绿豆学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 66, compare: '48%', hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。' }, { name: '刘备', school: '武汉市阳逻编织学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 68, compare: '21%', hobby: '我得空明,如鱼得水也' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 91, compare: '12%', hobby: '子龙,子龙,世无双' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 91, compare: '12%', hobby: '子龙,子龙,世无双' }, { name: '孔明', school: '武汉市阳逻卧龙学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 99, compare: '18%', hobby: '兴汉讨贼,克复中原' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 36, compare: '48%', hobby: '子龙,子龙,世无双' }, { name: '关羽', school: '武汉市阳逻绿豆学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 66, compare: '48%', hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。' }, { name: '刘备', school: '武汉市阳逻编织学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 68, compare: '21%', hobby: '我得空明,如鱼得水也' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 91, compare: '12%', hobby: '子龙,子龙,世无双' }, { name: '孔明', school: '武汉市阳逻卧龙学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 99, compare: '18%', hobby: '兴汉讨贼,克复中原' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 36, compare: '48%', hobby: '子龙,子龙,世无双' }, { name: '关羽', school: '武汉市阳逻绿豆学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 66, compare: '48%', hobby: '颜良文丑,以吾观之,如土鸡瓦犬耳。' }, { name: '刘备', school: '武汉市阳逻编织学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 68, compare: '21%', hobby: '我得空明,如鱼得水也' }, { name: '赵云', school: '武汉市阳逻妇幼保健学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 91, compare: '12%', hobby: '子龙,子龙,世无双' }, { name: '孔明', school: '武汉市阳逻卧龙学院', major: '计算机科学与技术专业', gender: '男', graduation: '2022年1月12日', grade: 99, compare: '18%', hobby: '兴汉讨贼,克复中原' } ]) const page = ref(1) const pageSize = ref(10) const total = ref(dataList.value.length) const paginationData = computed(() => { // 按页码和每页条数截取数据 return dataList.value.slice((page.value - 1) * pageSize.value, page.value * pageSize.value) }) ``` ::: ## Attributes | 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 | | --------------- | --------------------------------------------------- | ---------------------------- | ------ | ------ | ---------------- | | data | 显示的数据 | Array | - | - | 0.0.39 | | border | 是否带有边框 | boolean | - | true | 0.0.39 | | stripe | 是否为斑马纹表 | boolean | - | true | 0.0.39 | | height | Table 的高度,无默认值,设置后自动开启固定表头。 | `number / string` | - | - | 0.0.39 | | rowHeight | 行高 | `number / string` | - | 50 | 0.0.39 | | showHeader | 是否显示表头 | boolean | - | true | 0.0.39 | | ellipsis | 是否超出 2 行隐藏 | boolean | - | true | 0.0.39 | | index | 是否显示索引列,可传入`boolean`也可传入 column 配置 | `boolean / TableColumnProps` | | false | 1.2.19 | | fixed-header | 是否固定表头,需要结合`height`才可以实现固定表头的效果。 | boolean | - | true | 1.5.0 | ## Events | 事件名称 | 说明 | 参数 | 最低版本 | | ----------- | ------------------------------------------------------------------ | -------------------------------- | -------- | | sort-method | 指定数据按照哪个属性进行排序,仅当 sortable 设置为 true 的时候有效 | `TableColumn:当前点击列数据` | 0.0.39 | | row-click | 当某一行被点击时会触发该事件 | `{rowIndex:number} 点击行的下标` | 0.0.39 | ## TableColumn Attributes | 参数 | 说明 | 类型 | 可选值 | 默认值 | 最低版本 | | -------- | --------------------------- | --------------- | ------------------- | ------ | -------- | | prop | 字段名称,对应列内容的字段名 | string | - | - | 0.0.39 | | label | 显示的标题 | string | - | - | 0.0.39 | | width | 对应列的宽度,单位为 px | number / string | - | 100 | 0.0.39 | | sortable | 是否开启列排序 | boolean | - | false | 0.0.39 | | fixed | 是否固定本列 | boolean | - | false | 0.0.39 | | align | 列的对齐方式 | AlignType | left, center, right | left | 0.0.39 | ## TableColumn Slot | name | 说明 | 参数 | 最低版本 | | ----- | -------------------------------------- | -------------------------------- | -------- | | value | 自定义列的内容,1.2.16 新增`index`参数 | `{ row: Object, index: number }` | 0.1.22 |