用于展示基础表格
import { createApp } from 'vue';
// vue
import { Table } from '@nutui/nutui';
// taro
import { Table } from '@nutui/nutui-taro';
const app = createApp();
app.use(Table);
:::demo
<template>
<nut-table :columns="columns" :data="data"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs, h } from 'vue';
export default {
props: {},
setup() {
const state = reactive({
columns: [
{
title: '姓名',
key: 'name',
stylehead: 'font-size:20px;color:red;font-weight:bolder;',
stylecolumn: 'font-size:10px;color:blue;'
},
{
title: '性别',
key: 'sex',
render: (record) => {
return h(
'span',
{
style: {
color: record.sex === '女' ? 'blue' : 'green'
}
},
record.sex
);
}
},
{
title: '学历',
key: 'record'
}
],
data: [
{
name: 'Tom',
sex: '男',
record: '小学'
},
{
name: 'Lucy',
sex: '女',
record: '本科'
},
{
name: 'Jack',
sex: '男',
record: '高中'
}
]
});
return {
...toRefs(state)
};
}
};
</script>
:::
:::demo
<template>
<nut-table :columns="columns" :data="data" :bordered="bordered"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs } from 'vue';
export default {
props: {},
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)
};
}
};
</script>
:::
:::demo
<template>
<nut-table :columns="columns" :data="data" :summary="summary"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs } from 'vue';
export default {
props: {},
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)
};
}
};
</script>
:::
:::demo
<template>
<nut-table :columns="columns3" :data="data2" :striped="striped"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs } from 'vue';
export default {
props: {},
setup() {
const state = reactive({
striped: true,
columns3: [
{
title: '姓名',
key: 'name'
},
{
title: '性别',
key: 'sex'
},
{
title: '学历',
key: 'record'
},
{
title: '年龄',
key: 'age'
},
{
title: '地址',
key: 'address'
}
],
data2: [
{
name: 'Tom',
sex: '男',
record: '小学',
age: 13,
address: '北京'
},
{
name: 'Lucy',
sex: '女',
record: '本科',
age: 34,
address: '上海'
},
{
name: 'Jack',
sex: '男',
record: '高中',
age: 4,
address: '杭州'
}
]
});
return {
...toRefs(state)
};
}
};
</script>
:::
:::demo
<template>
<nut-table :columns="columns" :data="data"></nut-table>
<nut-table :columns="columns3" :data="data3">
<template #nodata>
<div class="no-data"> 这里是自定义展示 </div>
</template>
</nut-table>
</template>
<script lang="ts">
import { reactive, toRefs } from 'vue';
export default {
setup() {
const state = reactive({
columns: [
{
title: '姓名',
key: 'name'
},
{
title: '性别',
key: 'sex'
},
{
title: '学历',
key: 'record'
},
{
title: '年龄',
key: 'age'
},
{
title: '地址',
key: 'address'
}
],
data: [],
columns3: [
{
title: '姓名',
key: 'name'
},
{
title: '性别',
key: 'sex'
},
{
title: '学历',
key: 'record'
},
{
title: '年龄',
key: 'age'
},
{
title: '地址',
key: 'address'
}
],
data3: []
});
return {
...toRefs(state)
};
}
};
</script>
:::
:::demo
<template>
<nut-table :columns="columns" :data="data"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs, h } from 'vue';
import { Button } from '@nutui/nutui';
import { Dongdong } from '@nutui/icons-vue';
export default {
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(Dongdong, { width: '14px',height:'14px '});
}
},
{
name: 'Jack',
sex: '男',
record: '高中',
render: () => {
return h(
Button,
{
type: 'success',
size: 'small',
onClick: () => {
window.open('https://www.jd.com');
}
},
'跳转到京东'
);
}
}
]
});
return {
...toRefs(state)
};
}
};
</script>
:::
:::demo
<template>
<h2>支持异步渲染(5s之后看效果)</h2>
<nut-table :columns="columns" :data="data"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs, onMounted } from 'vue';
export default {
props: {},
setup() {
const state = reactive({
columns: [
{
title: '姓名',
key: 'name'
},
{
title: '性别',
key: 'sex'
},
{
title: '学历',
key: 'record'
},
{
title: '年龄',
key: 'age'
},
{
title: '地址',
key: 'address'
}
],
data: [],
data1: [
{
address: '北京',
name: 'Tom',
sex: '男',
record: '小学',
age: 13
},
{
record: '本科',
name: 'Lucy',
sex: '女',
age: 34,
address: '上海'
},
{
name: 'Jack',
sex: '男',
record: '高中',
age: 4,
address: '杭州'
}
]
});
onMounted(() => {
setTimeout(() => {
state.data = state.data1.slice();
}, 5000);
});
return {
...toRefs(state)
};
}
};
</script>
:::
:::demo
<template>
<nut-table :columns="columns" :data="data" @sorter="handleSorter"></nut-table>
</template>
<script lang="ts">
import { reactive, toRefs } from 'vue';
import { Toast } from '@nutui/nutui';
export default {
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),
handleSorter
};
}
};
</script>
:::
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| bordered | 是否显示边框 | Boolean | true |
| columns | 表头数据 | TableColumnProps[] | [] |
| data | 表格数据 | Object[] | [] |
| summary | 是否显示简介 | Function | - |
| striped | 条纹是否明暗交替 | Boolean | false |
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| key | 列的唯一标识 | String | `` |
| title | 表头标题 | String | `` |
| stylehead | 表头样式 | String | `` |
| stylecolumn | 列样式 | String | `` |
| align | 列的对齐方式,可选值left,center,right |
String | left |
| sorter | 排序,可选值有 true,function, default, 其中 default表示点击之后可能会依赖接口, function可以返回具体的排序函数, default表示采用默认的排序算法 |
Boolean、Function、String | - |
| render | 自定义渲染列数据,优先级高 | Function(record) | - |
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| sorter | 点击排序按钮触发 | item: 当前点击的表头的数据 |