# Table 表格 ### 介绍 用于展示基础表格 ### 安装 ``` javascript import { createApp } from 'vue'; // vue import { Table } from '@nutui/nutui'; // taro import { Table } from '@nutui/nutui-taro'; const app = createApp(); app.use(Table); ``` ## 代码演示 ### 基础使用 ```html ``` ```ts setup() { const state = reactive({ columns: [ { title: '姓名', key: 'name' }, { title: '性别', key: 'sex' }, { title: '学历', key: 'record' } ], data: [ { name: 'Tom', sex: '男', record: '小学' }, { name: 'Lucy', sex: '女', record: '本科' }, { name: 'Jack', sex: '男', record: '高中' } ], }); return { ...toRefs(state), }; } ``` ### 是否显示边框,文字对齐 ```html ``` ```ts setup() { const state = reactive({ bordered: false, columns: [ { title: '姓名', key: 'name', align: 'center' }, { title: '性别', key: 'sex' }, { title: '学历', key: 'record' } ], data: [ { name: 'Tom', sex: '男', record: '小学' }, { name: 'Lucy', sex: '女', record: '本科' }, { name: 'Jack', sex: '男', record: '高中' } ], }); return { ...toRefs(state), }; } ``` ### 显示总结栏 ```html ``` ```ts setup() { const state = reactive({ columns: [ { title: '姓名', key: 'name' }, { title: '性别', key: 'sex' }, { title: '学历', key: 'record' }, { title: '年龄', key: 'age' }, { title: '地址', key: 'address' } ], data: [ { name: 'Tom', sex: '男', record: '小学', age: 13, address: '北京' }, { name: 'Lucy', sex: '女', record: '本科', age: 34, address: '上海' }, { name: 'Jack', sex: '男', record: '高中', age: 4, address: '杭州' } ], summary: () => { return { value: '这是总结栏', colspan: 5 } } }); return { ...toRefs(state), }; } ``` ### 条纹、明暗交替 ```html ``` ```ts setup() { const state = reactive({ ..., striped: true, }); return { ...toRefs(state), }; } ``` ### 无数据默认展示,支持自定义 ```html ``` ```ts setup() { const state = reactive({ columns: [ { title: '姓名', key: 'name' }, { title: '性别', key: 'sex' }, { title: '学历', key: 'record' }, { title: '年龄', key: 'age' }, { title: '地址', key: 'address' } ], data: [], striped: true, }); return { ...toRefs(state), }; } ``` ### 自定义单元格 ```html ``` ```ts setup() { const state = reactive({ columns: [ { title: '姓名', key: 'name', align: 'center' }, { title: '性别', key: 'sex' }, { title: '学历', key: 'record' }, { title: '操作', key: 'render' } ], data: [ { name: 'Tom', sex: '男', record: '小学', render: () => { return h( Button, { onClick: () => { (Toast as any).text('hello'); }, size: 'small', type: 'primary' }, 'Hello' ); } }, { name: 'Lucy', sex: '女', record: '本科', render: () => { return h(Icon, { name: 'dongdong', size: '14px' }); } }, { name: 'Jack', sex: '男', record: '高中', render: () => { return h( Button, { type: 'success', size: 'small', onClick: () => { window.open('https://www.jd.com'); } }, '跳转到京东' ); } } ] }); return { ...toRefs(state), }; } ``` ### 支持异步渲染 ```html ``` ```ts setup() { const state = reactive({ data: [], data1: [ { name: 'Tom', sex: '男', record: '小学', age: 13, address: '北京' }, { name: 'Lucy', sex: '女', record: '本科', age: 34, address: '上海' }, { name: 'Jack', sex: '男', record: '高中', age: 4, address: '杭州' } ] }); onMounted(() => { setTimeout(() => { state.data = state.data1.slice(); }, 5000); }); return { ...toRefs(state), }; } ``` ### 支持排序 ```html ``` ```ts setup() { const state = reactive({ columns: [ { title: '姓名', key: 'name', align: 'center', sorter: true }, { title: '性别', key: 'sex', }, { title: '学历', key: 'record' }, { title: '年龄', key: 'age', sorter: (row1: any, row2: any) => { return row1.age - row2.age } } ], data: [ { name: 'Tom', sex: '男', record: '小学', age: 10 }, { name: 'Lucy', sex: '女', record: '本科', age: 30 }, { name: 'Jack', sex: '男', record: '高中', age: 4 } ] }); const handleSorter = (item: TableColumnProps) => { (Toast as any).text(`${JSON.stringify(item)}`); } return { ...toRefs(state), }; } ``` ## API ### Props | 参数 | 说明 | 类型 | 默认值 | |--------------|----------------------------------|--------|------------------| | bordered | 是否显示边框 | Boolean |`true` | | columns | 表头数据 | TableColumnProps[] |`[]` | | data | 表格数据 | Object[] |`[]` | | summary | 是否显示简介 | Function | - | | striped | 条纹是否明暗交替 | Boolean |`false` | ### TableColumnProps | 参数 | 说明 | 类型 | 默认值 | |--------------|----------------------------------|--------|------------------| | key | 列的唯一标识 | String |`` | | title | 表头标题 | String |`` | | align | 列的对齐方式,可选值`left`,`center`,`right` | String |`left` | | sorter | 排序,可选值有 `true`,`function`, `default`, 其中 `default`表示点击之后可能会依赖接口, `function`可以返回具体的排序函数, `default`表示采用默认的排序算法 | Boolean、Function、String |-| ### Events | 事件名 | 说明 | 回调参数 | |--------|----------------|--------------| | sorter | 点击排序按钮触发 | item: 当前点击的表头的数据 |