Table 表格

概述

主要用于展示大量结构化数据。

支持排序、筛选、分页、自定义操作、导出 csv 等复杂功能。

注意:非 template/render 模式下,需使用 i-table

Table 从 3.2.0 版本开始,支持 slot-scope,查看示例

代码示例

Table 表格 - 图1

基础用法

表格的最简单用法。

  1. <template>
  2. <Table :columns="columns1" :data="data1"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns1: [
  9. {
  10. title: 'Name',
  11. key: 'name'
  12. },
  13. {
  14. title: 'Age',
  15. key: 'age'
  16. },
  17. {
  18. title: 'Address',
  19. key: 'address'
  20. }
  21. ],
  22. data1: [
  23. {
  24. name: 'John Brown',
  25. age: 18,
  26. address: 'New York No. 1 Lake Park',
  27. date: '2016-10-03'
  28. },
  29. {
  30. name: 'Jim Green',
  31. age: 24,
  32. address: 'London No. 1 Lake Park',
  33. date: '2016-10-01'
  34. },
  35. {
  36. name: 'Joe Black',
  37. age: 30,
  38. address: 'Sydney No. 1 Lake Park',
  39. date: '2016-10-02'
  40. },
  41. {
  42. name: 'Jon Snow',
  43. age: 26,
  44. address: 'Ottawa No. 2 Lake Park',
  45. date: '2016-10-04'
  46. }
  47. ]
  48. }
  49. }
  50. }
  51. </script>

Table 表格 - 图2

斑马纹

设置属性 stripe ,表格会间隔显示不同颜色,用于区分不同行数据。

  1. <template>
  2. <Table stripe :columns="columns1" :data="data1"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns1: [
  9. {
  10. title: 'Name',
  11. key: 'name'
  12. },
  13. {
  14. title: 'Age',
  15. key: 'age'
  16. },
  17. {
  18. title: 'Address',
  19. key: 'address'
  20. }
  21. ],
  22. data1: [
  23. {
  24. name: 'John Brown',
  25. age: 18,
  26. address: 'New York No. 1 Lake Park',
  27. date: '2016-10-03'
  28. },
  29. {
  30. name: 'Jim Green',
  31. age: 24,
  32. address: 'London No. 1 Lake Park',
  33. date: '2016-10-01'
  34. },
  35. {
  36. name: 'Joe Black',
  37. age: 30,
  38. address: 'Sydney No. 1 Lake Park',
  39. date: '2016-10-02'
  40. },
  41. {
  42. name: 'Jon Snow',
  43. age: 26,
  44. address: 'Ottawa No. 2 Lake Park',
  45. date: '2016-10-04'
  46. }
  47. ]
  48. }
  49. }
  50. }
  51. </script>

Table 表格 - 图3

带边框

添加表格的边框线。

  1. <template>
  2. <Table border :columns="columns1" :data="data1"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns1: [
  9. {
  10. title: 'Name',
  11. key: 'name'
  12. },
  13. {
  14. title: 'Age',
  15. key: 'age'
  16. },
  17. {
  18. title: 'Address',
  19. key: 'address'
  20. }
  21. ],
  22. data1: [
  23. {
  24. name: 'John Brown',
  25. age: 18,
  26. address: 'New York No. 1 Lake Park',
  27. date: '2016-10-03'
  28. },
  29. {
  30. name: 'Jim Green',
  31. age: 24,
  32. address: 'London No. 1 Lake Park',
  33. date: '2016-10-01'
  34. },
  35. {
  36. name: 'Joe Black',
  37. age: 30,
  38. address: 'Sydney No. 1 Lake Park',
  39. date: '2016-10-02'
  40. },
  41. {
  42. name: 'Jon Snow',
  43. age: 26,
  44. address: 'Ottawa No. 2 Lake Park',
  45. date: '2016-10-04'
  46. }
  47. ]
  48. }
  49. }
  50. }
  51. </script>

Table 表格 - 图4

特定样式

:通过属性 row-class-name 可以给某一行指定一个样式名称。

:通过给列 columns 设置字段 className 可以给某一列指定一个样式。

单元格:通过给数据 data 设置字段 cellClassName 可以给任意一个单元格指定样式。

  1. <style>
  2. .ivu-table .demo-table-info-row td{
  3. background-color: #2db7f5;
  4. color: #fff;
  5. }
  6. .ivu-table .demo-table-error-row td{
  7. background-color: #ff6600;
  8. color: #fff;
  9. }
  10. .ivu-table td.demo-table-info-column{
  11. background-color: #2db7f5;
  12. color: #fff;
  13. }
  14. .ivu-table .demo-table-info-cell-name {
  15. background-color: #2db7f5;
  16. color: #fff;
  17. }
  18. .ivu-table .demo-table-info-cell-age {
  19. background-color: #ff6600;
  20. color: #fff;
  21. }
  22. .ivu-table .demo-table-info-cell-address {
  23. background-color: #187;
  24. color: #fff;
  25. }
  26. </style>
  27. <template>
  28. <p>Custom row styles:</p>
  29. <Table :row-class-name="rowClassName" :columns="columns1" :data="data1"></Table>
  30. <p>Custom column styles:</p>
  31. <Table :columns="columns9" :data="data1"></Table>
  32. <p>Custom arbitrary cell styles:</p>
  33. <Table :columns="columns1" :data="data8"></Table>
  34. </template>
  35. <script>
  36. export default {
  37. data () {
  38. return {
  39. columns1: [
  40. {
  41. title: 'Name',
  42. key: 'name'
  43. },
  44. {
  45. title: 'Age',
  46. key: 'age'
  47. },
  48. {
  49. title: 'Address',
  50. key: 'address'
  51. }
  52. ],
  53. columns9: [
  54. {
  55. title: 'Name',
  56. key: 'name'
  57. },
  58. {
  59. title: 'Age',
  60. key: 'age',
  61. className: 'demo-table-info-column'
  62. },
  63. {
  64. title: 'Address',
  65. key: 'address'
  66. }
  67. ],
  68. data1: [
  69. {
  70. name: 'John Brown',
  71. age: 18,
  72. address: 'New York No. 1 Lake Park',
  73. date: '2016-10-03'
  74. },
  75. {
  76. name: 'Jim Green',
  77. age: 24,
  78. address: 'London No. 1 Lake Park',
  79. date: '2016-10-01'
  80. },
  81. {
  82. name: 'Joe Black',
  83. age: 30,
  84. address: 'Sydney No. 1 Lake Park',
  85. date: '2016-10-02'
  86. },
  87. {
  88. name: 'Jon Snow',
  89. age: 26,
  90. address: 'Ottawa No. 2 Lake Park',
  91. date: '2016-10-04'
  92. }
  93. ],
  94. data8: [
  95. {
  96. name: 'John Brown',
  97. age: 18,
  98. address: 'New York No. 1 Lake Park'
  99. },
  100. {
  101. name: 'Jim Green',
  102. age: 25,
  103. address: 'London No. 1 Lake Park',
  104. cellClassName: {
  105. age: 'demo-table-info-cell-age',
  106. address: 'demo-table-info-cell-address'
  107. }
  108. },
  109. {
  110. name: 'Joe Black',
  111. age: 30,
  112. address: 'Sydney No. 1 Lake Park'
  113. },
  114. {
  115. name: 'Jon Snow',
  116. age: 26,
  117. address: 'Ottawa No. 2 Lake Park',
  118. cellClassName: {
  119. name: 'demo-table-info-cell-name'
  120. }
  121. }
  122. ]
  123. }
  124. },
  125. methods: {
  126. rowClassName (row, index) {
  127. if (index === 1) {
  128. return 'demo-table-info-row';
  129. } else if (index === 3) {
  130. return 'demo-table-error-row';
  131. }
  132. return '';
  133. }
  134. }
  135. }
  136. </script>

Table 表格 - 图5

固定表头

通过设置属性 height 给表格指定高度后,会自动固定表头。当纵向内容过多时可以使用。

3.4.0 版本后也可以设置 max-height 属性。

  1. <template>
  2. <Table height="200" :columns="columns1" :data="data2"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns1: [
  9. {
  10. title: 'Name',
  11. key: 'name'
  12. },
  13. {
  14. title: 'Age',
  15. key: 'age'
  16. },
  17. {
  18. title: 'Address',
  19. key: 'address'
  20. }
  21. ],
  22. data2: [
  23. {
  24. name: 'John Brown',
  25. age: 18,
  26. address: 'New York No. 1 Lake Park',
  27. date: '2016-10-03'
  28. },
  29. {
  30. name: 'Jim Green',
  31. age: 24,
  32. address: 'London No. 1 Lake Park',
  33. date: '2016-10-01'
  34. },
  35. {
  36. name: 'Joe Black',
  37. age: 30,
  38. address: 'Sydney No. 1 Lake Park',
  39. date: '2016-10-02'
  40. },
  41. {
  42. name: 'Jon Snow',
  43. age: 26,
  44. address: 'Ottawa No. 2 Lake Park',
  45. date: '2016-10-04'
  46. },
  47. {
  48. name: 'John Brown',
  49. age: 18,
  50. address: 'New York No. 1 Lake Park',
  51. date: '2016-10-03'
  52. },
  53. {
  54. name: 'Jim Green',
  55. age: 24,
  56. address: 'London No. 1 Lake Park',
  57. date: '2016-10-01'
  58. },
  59. {
  60. name: 'Joe Black',
  61. age: 30,
  62. address: 'Sydney No. 1 Lake Park',
  63. date: '2016-10-02'
  64. },
  65. {
  66. name: 'Jon Snow',
  67. age: 26,
  68. address: 'Ottawa No. 2 Lake Park',
  69. date: '2016-10-04'
  70. }
  71. ]
  72. }
  73. }
  74. }
  75. </script>

Table 表格 - 图6

固定列

通过给数据 columns 的项设置 fixedleftright,可以左右固定需要的列。当横向内容过多时可以使用。

  1. <template>
  2. <Table width="550" border :columns="columns2" :data="data3"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns2: [
  9. {
  10. title: 'Name',
  11. key: 'name',
  12. width: 100,
  13. fixed: 'left'
  14. },
  15. {
  16. title: 'Age',
  17. key: 'age',
  18. width: 100
  19. },
  20. {
  21. title: 'Province',
  22. key: 'province',
  23. width: 100
  24. },
  25. {
  26. title: 'City',
  27. key: 'city',
  28. width: 100
  29. },
  30. {
  31. title: 'Address',
  32. key: 'address',
  33. width: 200
  34. },
  35. {
  36. title: 'Postcode',
  37. key: 'zip',
  38. width: 100
  39. },
  40. {
  41. title: 'Action',
  42. key: 'action',
  43. fixed: 'right',
  44. width: 120,
  45. render: (h, params) => {
  46. return h('div', [
  47. h('Button', {
  48. props: {
  49. type: 'text',
  50. size: 'small'
  51. }
  52. }, 'View'),
  53. h('Button', {
  54. props: {
  55. type: 'text',
  56. size: 'small'
  57. }
  58. }, 'Edit')
  59. ]);
  60. }
  61. }
  62. ],
  63. data3: [
  64. {
  65. name: 'John Brown',
  66. age: 18,
  67. address: 'New York No. 1 Lake Park',
  68. province: 'America',
  69. city: 'New York',
  70. zip: 100000
  71. },
  72. {
  73. name: 'Jim Green',
  74. age: 24,
  75. address: 'Washington, D.C. No. 1 Lake Park',
  76. province: 'America',
  77. city: 'Washington, D.C.',
  78. zip: 100000
  79. },
  80. {
  81. name: 'Joe Black',
  82. age: 30,
  83. address: 'Sydney No. 1 Lake Park',
  84. province: 'Australian',
  85. city: 'Sydney',
  86. zip: 100000
  87. },
  88. {
  89. name: 'Jon Snow',
  90. age: 26,
  91. address: 'Ottawa No. 2 Lake Park',
  92. province: 'Canada',
  93. city: 'Ottawa',
  94. zip: 100000
  95. }
  96. ]
  97. }
  98. }
  99. }
  100. </script>

Table 表格 - 图7

固定表头和列

同时应用上述两个属性,可以同时固定表头和列。

  1. <template>
  2. <Table width="550" height="200" border :columns="columns2" :data="data4"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns2: [
  9. {
  10. title: 'Name',
  11. key: 'name',
  12. width: 100,
  13. fixed: 'left'
  14. },
  15. {
  16. title: 'Age',
  17. key: 'age',
  18. width: 100
  19. },
  20. {
  21. title: 'Province',
  22. key: 'province',
  23. width: 100
  24. },
  25. {
  26. title: 'City',
  27. key: 'city',
  28. width: 100
  29. },
  30. {
  31. title: 'Address',
  32. key: 'address',
  33. width: 200
  34. },
  35. {
  36. title: 'Postcode',
  37. key: 'zip',
  38. width: 100
  39. },
  40. {
  41. title: 'Action',
  42. key: 'action',
  43. fixed: 'right',
  44. width: 120,
  45. render: (h, params) => {
  46. return h('div', [
  47. h('Button', {
  48. props: {
  49. type: 'text',
  50. size: 'small'
  51. }
  52. }, 'View'),
  53. h('Button', {
  54. props: {
  55. type: 'text',
  56. size: 'small'
  57. }
  58. }, 'Edit')
  59. ]);
  60. }
  61. }
  62. ],
  63. data4: [
  64. {
  65. name: 'John Brown',
  66. age: 18,
  67. address: 'New York No. 1 Lake Park',
  68. province: 'America',
  69. city: 'New York',
  70. zip: 100000
  71. },
  72. {
  73. name: 'Jim Green',
  74. age: 24,
  75. address: 'Washington, D.C. No. 1 Lake Park',
  76. province: 'America',
  77. city: 'Washington, D.C.',
  78. zip: 100000
  79. },
  80. {
  81. name: 'Joe Black',
  82. age: 30,
  83. address: 'Sydney No. 1 Lake Park',
  84. province: 'Australian',
  85. city: 'Sydney',
  86. zip: 100000
  87. },
  88. {
  89. name: 'Jon Snow',
  90. age: 26,
  91. address: 'Ottawa No. 2 Lake Park',
  92. province: 'Canada',
  93. city: 'Ottawa',
  94. zip: 100000
  95. },
  96. {
  97. name: 'John Brown',
  98. age: 18,
  99. address: 'New York No. 1 Lake Park',
  100. province: 'America',
  101. city: 'New York',
  102. zip: 100000
  103. },
  104. {
  105. name: 'Jim Green',
  106. age: 24,
  107. address: 'Washington, D.C. No. 1 Lake Park',
  108. province: 'America',
  109. city: 'Washington, D.C.',
  110. zip: 100000
  111. },
  112. {
  113. name: 'Joe Black',
  114. age: 30,
  115. address: 'Sydney No. 1 Lake Park',
  116. province: 'Australian',
  117. city: 'Sydney',
  118. zip: 100000
  119. },
  120. {
  121. name: 'Jon Snow',
  122. age: 26,
  123. address: 'Ottawa No. 2 Lake Park',
  124. province: 'Canada',
  125. city: 'Ottawa',
  126. zip: 100000
  127. }
  128. ]
  129. }
  130. }
  131. }
  132. </script>

Table 表格 - 图8

单选

通过设置属性 highlight-row,可以选中某一行。

当选择时,触发事件 @on-current-change,可以自定义操作,事件返回两个值 currentRowoldCurrentRow,分别为当前行的数据和上一次选择的数据。

通过给 columns 数据设置一项,指定 type: 'index',可以自动显示一个从 1 开始的索引列。使用 indexMethod 可以自定义序号。

给 data 项设置特殊 key _highlight: true 可以默认选中当前项。

调用 clearCurrentRow 方法可以手动清除选中项。

  1. <template>
  2. <div>
  3. <Table highlight-row ref="currentRowTable" :columns="columns3" :data="data1"></Table>
  4. <Button @click="handleClearCurrentRow">Clear</Button>
  5. </div>
  6. </template>
  7. <script>
  8. export default {
  9. data () {
  10. return {
  11. columns3: [
  12. {
  13. type: 'index',
  14. width: 60,
  15. align: 'center'
  16. },
  17. {
  18. title: 'Name',
  19. key: 'name'
  20. },
  21. {
  22. title: 'Age',
  23. key: 'age'
  24. },
  25. {
  26. title: 'Address',
  27. key: 'address'
  28. }
  29. ],
  30. data1: [
  31. {
  32. name: 'John Brown',
  33. age: 18,
  34. address: 'New York No. 1 Lake Park',
  35. date: '2016-10-03'
  36. },
  37. {
  38. name: 'Jim Green',
  39. age: 24,
  40. address: 'London No. 1 Lake Park',
  41. date: '2016-10-01'
  42. },
  43. {
  44. name: 'Joe Black',
  45. age: 30,
  46. address: 'Sydney No. 1 Lake Park',
  47. date: '2016-10-02'
  48. },
  49. {
  50. name: 'Jon Snow',
  51. age: 26,
  52. address: 'Ottawa No. 2 Lake Park',
  53. date: '2016-10-04'
  54. }
  55. ]
  56. }
  57. },
  58. methods: {
  59. handleClearCurrentRow () {
  60. this.$refs.currentRowTable.clearCurrentRow();
  61. }
  62. }
  63. }
  64. </script>

Table 表格 - 图9

多选

通过给 columns 数据设置一项,指定 type: 'selection',即可自动开启多选功能。

给 data 项设置特殊 key _checked: true 可以默认选中当前项。

给 data 项设置特殊 key _disabled: true 可以禁止选择当前项。

正确使用好以下事件,可以达到需要的效果:

  • @on-select,选中某一项触发,返回值为 selectionrow,分别为已选项和刚选择的项。
  • @on-select-all,点击全选时触发,返回值为 selection,已选项。
  • @on-selection-change,只要选中项发生变化时就会触发,返回值为 selection,已选项。
  1. <template>
  2. <div>
  3. <Table border ref="selection" :columns="columns4" :data="data1"></Table>
  4. <Button @click="handleSelectAll(true)">Set all selected</Button>
  5. <Button @click="handleSelectAll(false)">Cancel all selected</Button>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. data () {
  11. return {
  12. columns4: [
  13. {
  14. type: 'selection',
  15. width: 60,
  16. align: 'center'
  17. },
  18. {
  19. title: 'Name',
  20. key: 'name'
  21. },
  22. {
  23. title: 'Age',
  24. key: 'age'
  25. },
  26. {
  27. title: 'Address',
  28. key: 'address'
  29. }
  30. ],
  31. data1: [
  32. {
  33. name: 'John Brown',
  34. age: 18,
  35. address: 'New York No. 1 Lake Park',
  36. date: '2016-10-03'
  37. },
  38. {
  39. name: 'Jim Green',
  40. age: 24,
  41. address: 'London No. 1 Lake Park',
  42. date: '2016-10-01'
  43. },
  44. {
  45. name: 'Joe Black',
  46. age: 30,
  47. address: 'Sydney No. 1 Lake Park',
  48. date: '2016-10-02'
  49. },
  50. {
  51. name: 'Jon Snow',
  52. age: 26,
  53. address: 'Ottawa No. 2 Lake Park',
  54. date: '2016-10-04'
  55. }
  56. ]
  57. }
  58. },
  59. methods: {
  60. handleSelectAll (status) {
  61. this.$refs.selection.selectAll(status);
  62. }
  63. }
  64. }
  65. </script>

Table 表格 - 图10

排序

通过给 columns 数据的项,设置 sortable: true,即可对该列数据进行排序。

排序默认使用升序和降序,也可以通过设置属性 sortMethod 指定一个自定义排序函数,接收三个参数 a 、 b 和 type。

通过给某一列设置 sortType 可以在初始化时使用排序。

如果使用远程排序,可以设置 sortable: 'custom',然后在触发排序事件 @on-sort-change后,进行远程排序,并手动设置新的 data,详见 API。

注意,排序并不会影响到源数据 data。

  1. <template>
  2. <Table border :columns="columns5" :data="data5"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns5: [
  9. {
  10. title: 'Date',
  11. key: 'date',
  12. sortable: true
  13. },
  14. {
  15. title: 'Name',
  16. key: 'name'
  17. },
  18. {
  19. title: 'Age',
  20. key: 'age',
  21. sortable: true
  22. },
  23. {
  24. title: 'Address',
  25. key: 'address'
  26. }
  27. ],
  28. data5: [
  29. {
  30. name: 'John Brown',
  31. age: 18,
  32. address: 'New York No. 1 Lake Park',
  33. date: '2016-10-03'
  34. },
  35. {
  36. name: 'Jim Green',
  37. age: 24,
  38. address: 'London No. 1 Lake Park',
  39. date: '2016-10-01'
  40. },
  41. {
  42. name: 'Joe Black',
  43. age: 30,
  44. address: 'Sydney No. 1 Lake Park',
  45. date: '2016-10-02'
  46. },
  47. {
  48. name: 'Jon Snow',
  49. age: 26,
  50. address: 'Ottawa No. 2 Lake Park',
  51. date: '2016-10-04'
  52. }
  53. ]
  54. }
  55. }
  56. }
  57. </script>

Table 表格 - 图11

筛选

通过给 columns 数据的项,设置 filters,可进行筛选,filters 接收一个数组,详见 Demo 和 API。

必须指定一个筛选函数 filterMethod 才可以进行筛选,filterMethod 传入两个参数 value 和 row,详见 Demo 和 API。

如果指定 filterMultiple: false,则使用单选,默认为多选。

注意,筛选并不会影响到源数据 data。

  1. <template>
  2. <Table border :columns="columns6" :data="data5"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns6: [
  9. {
  10. title: 'Date',
  11. key: 'date'
  12. },
  13. {
  14. title: 'Name',
  15. key: 'name'
  16. },
  17. {
  18. title: 'Age',
  19. key: 'age',
  20. filters: [
  21. {
  22. label: 'Greater than 25',
  23. value: 1
  24. },
  25. {
  26. label: 'Less than 25',
  27. value: 2
  28. }
  29. ],
  30. filterMultiple: false,
  31. filterMethod (value, row) {
  32. if (value === 1) {
  33. return row.age > 25;
  34. } else if (value === 2) {
  35. return row.age < 25;
  36. }
  37. }
  38. },
  39. {
  40. title: 'Address',
  41. key: 'address',
  42. filters: [
  43. {
  44. label: 'New York',
  45. value: 'New York'
  46. },
  47. {
  48. label: 'London',
  49. value: 'London'
  50. },
  51. {
  52. label: 'Sydney',
  53. value: 'Sydney'
  54. }
  55. ],
  56. filterMethod (value, row) {
  57. return row.address.indexOf(value) > -1;
  58. }
  59. }
  60. ],
  61. data5: [
  62. {
  63. name: 'John Brown',
  64. age: 18,
  65. address: 'New York No. 1 Lake Park',
  66. date: '2016-10-03'
  67. },
  68. {
  69. name: 'Jim Green',
  70. age: 24,
  71. address: 'London No. 1 Lake Park',
  72. date: '2016-10-01'
  73. },
  74. {
  75. name: 'Joe Black',
  76. age: 30,
  77. address: 'Sydney No. 1 Lake Park',
  78. date: '2016-10-02'
  79. },
  80. {
  81. name: 'Jon Snow',
  82. age: 26,
  83. address: 'Ottawa No. 2 Lake Park',
  84. date: '2016-10-04'
  85. }
  86. ],
  87. }
  88. }
  89. }
  90. </script>

Table 表格 - 图12

自定义列模板

通过给 columns 数据的项,设置一个函数 render,可以自定义渲染当前列,包括渲染自定义组件,它基于 Vue 的 Render 函数。

render 函数传入两个参数,第一个是 h,第二个是对象,包含 rowcolumnindex,分别指当前单元格数据,当前列数据,当前是第几行。

学习 Render 函数的内容

  1. <template>
  2. <Table border :columns="columns7" :data="data6"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns7: [
  9. {
  10. title: 'Name',
  11. key: 'name',
  12. render: (h, params) => {
  13. return h('div', [
  14. h('Icon', {
  15. props: {
  16. type: 'person'
  17. }
  18. }),
  19. h('strong', params.row.name)
  20. ]);
  21. }
  22. },
  23. {
  24. title: 'Age',
  25. key: 'age'
  26. },
  27. {
  28. title: 'Address',
  29. key: 'address'
  30. },
  31. {
  32. title: 'Action',
  33. key: 'action',
  34. width: 150,
  35. align: 'center',
  36. render: (h, params) => {
  37. return h('div', [
  38. h('Button', {
  39. props: {
  40. type: 'primary',
  41. size: 'small'
  42. },
  43. style: {
  44. marginRight: '5px'
  45. },
  46. on: {
  47. click: () => {
  48. this.show(params.index)
  49. }
  50. }
  51. }, 'View'),
  52. h('Button', {
  53. props: {
  54. type: 'error',
  55. size: 'small'
  56. },
  57. on: {
  58. click: () => {
  59. this.remove(params.index)
  60. }
  61. }
  62. }, 'Delete')
  63. ]);
  64. }
  65. }
  66. ],
  67. data6: [
  68. {
  69. name: 'John Brown',
  70. age: 18,
  71. address: 'New York No. 1 Lake Park'
  72. },
  73. {
  74. name: 'Jim Green',
  75. age: 24,
  76. address: 'London No. 1 Lake Park'
  77. },
  78. {
  79. name: 'Joe Black',
  80. age: 30,
  81. address: 'Sydney No. 1 Lake Park'
  82. },
  83. {
  84. name: 'Jon Snow',
  85. age: 26,
  86. address: 'Ottawa No. 2 Lake Park'
  87. }
  88. ]
  89. }
  90. },
  91. methods: {
  92. show (index) {
  93. this.$Modal.info({
  94. title: 'User Info',
  95. content: `Name${this.data6[index].name}<br>Age${this.data6[index].age}<br>Address${this.data6[index].address}`
  96. })
  97. },
  98. remove (index) {
  99. this.data6.splice(index, 1);
  100. }
  101. }
  102. }
  103. </script>

Table 表格 - 图13

slot-scope 写法

从 3.2.0 版本开始支持 slot-scope 写法。

在 columns 的某列声明 slot 后,就可以在 Table 的 slot 中使用 slot-scope。

slot-scope 的参数有 3 个:当前行数据 row,当前列数据 column,当前行序号 index。

查看使用 slot-scope 实现修改整行数据的示例

  1. <template>
  2. <Table border :columns="columns12" :data="data6">
  3. <template slot-scope="{ row }" slot="name">
  4. <strong>{{ row.name }}</strong>
  5. </template>
  6. <template slot-scope="{ row, index }" slot="action">
  7. <Button type="primary" size="small" style="margin-right: 5px" @click="show(index)">View</Button>
  8. <Button type="error" size="small" @click="remove(index)">Delete</Button>
  9. </template>
  10. </Table>
  11. </template>
  12. <script>
  13. export default {
  14. data () {
  15. return {
  16. columns12: [
  17. {
  18. title: 'Name',
  19. slot: 'name'
  20. },
  21. {
  22. title: 'Age',
  23. key: 'age'
  24. },
  25. {
  26. title: 'Address',
  27. key: 'address'
  28. },
  29. {
  30. title: 'Action',
  31. slot: 'action',
  32. width: 150,
  33. align: 'center'
  34. }
  35. ],
  36. data6: [
  37. {
  38. name: 'John Brown',
  39. age: 18,
  40. address: 'New York No. 1 Lake Park'
  41. },
  42. {
  43. name: 'Jim Green',
  44. age: 24,
  45. address: 'London No. 1 Lake Park'
  46. },
  47. {
  48. name: 'Joe Black',
  49. age: 30,
  50. address: 'Sydney No. 1 Lake Park'
  51. },
  52. {
  53. name: 'Jon Snow',
  54. age: 26,
  55. address: 'Ottawa No. 2 Lake Park'
  56. }
  57. ]
  58. }
  59. },
  60. methods: {
  61. show (index) {
  62. this.$Modal.info({
  63. title: 'User Info',
  64. content: `Name${this.data6[index].name}<br>Age${this.data6[index].age}<br>Address${this.data6[index].address}`
  65. })
  66. },
  67. remove (index) {
  68. this.data6.splice(index, 1);
  69. }
  70. }
  71. }
  72. </script>

Table 表格 - 图14

可展开

当表格内容较多不能一次性完全展示时使用。

通过给 columns 数据设置一项,指定 type: 'expand',即可开启扩展功能。

给行数据 data 的某项设置 _expanded 为 true,可以默认展开当前行,设置 _disableExpand 可以禁用当前行的展开功能。

渲染展开区域与自定义列模板方法类似,使用 render 函数。当内容较复杂时,可拆分为组件或使用 JSX。

学习 Render 函数的内容

  1. // table-expand.vue
  2. <style scoped>
  3. .expand-row{
  4. margin-bottom: 16px;
  5. }
  6. </style>
  7. <template>
  8. <div>
  9. <Row class="expand-row">
  10. <Col span="8">
  11. <span class="expand-key">Job: </span>
  12. <span class="expand-value">{{ row.job }}</span>
  13. </Col>
  14. <Col span="8">
  15. <span class="expand-key">Interest: </span>
  16. <span class="expand-value">{{ row.interest }}</span>
  17. </Col>
  18. <Col span="8">
  19. <span class="expand-key">Birthday: </span>
  20. <span class="expand-value">{{ row.birthday }}</span>
  21. </Col>
  22. </Row>
  23. <Row>
  24. <Col span="8">
  25. <span class="expand-key">Favorite book: </span>
  26. <span class="expand-value">《{{ row.book }}》</span>
  27. </Col>
  28. <Col span="8">
  29. <span class="expand-key">Favorite movie: </span>
  30. <span class="expand-value">{{ row.movie }}</span>
  31. </Col>
  32. <Col span="8">
  33. <span class="expand-key">Favorite music: </span>
  34. <span class="expand-value">{{ row.music }}</span>
  35. </Col>
  36. </Row>
  37. </div>
  38. </template>
  39. <script>
  40. export default {
  41. props: {
  42. row: Object
  43. }
  44. };
  45. </script>
  46. // table.vue
  47. <template>
  48. <Table :columns="columns10" :data="data9"></Table>
  49. </template>
  50. <script>
  51. import expandRow from './table-expand.vue';
  52. export default {
  53. components: { expandRow },
  54. data () {
  55. return {
  56. columns10: [
  57. {
  58. type: 'expand',
  59. width: 50,
  60. render: (h, params) => {
  61. return h(expandRow, {
  62. props: {
  63. row: params.row
  64. }
  65. })
  66. }
  67. },
  68. {
  69. title: 'Name',
  70. key: 'name'
  71. },
  72. {
  73. title: 'Age',
  74. key: 'age'
  75. },
  76. {
  77. title: 'Address',
  78. key: 'address'
  79. }
  80. ],
  81. data9: [
  82. {
  83. name: 'John Brown',
  84. age: 18,
  85. address: 'New York No. 1 Lake Park',
  86. job: 'Data engineer',
  87. interest: 'badminton',
  88. birthday: '1991-05-14',
  89. book: 'Steve Jobs',
  90. movie: 'The Prestige',
  91. music: 'I Cry'
  92. },
  93. {
  94. name: 'Jim Green',
  95. age: 25,
  96. address: 'London No. 1 Lake Park',
  97. job: 'Data Scientist',
  98. interest: 'volleyball',
  99. birthday: '1989-03-18',
  100. book: 'My Struggle',
  101. movie: 'Roman Holiday',
  102. music: 'My Heart Will Go On'
  103. },
  104. {
  105. name: 'Joe Black',
  106. age: 30,
  107. address: 'Sydney No. 1 Lake Park',
  108. job: 'Data Product Manager',
  109. interest: 'tennis',
  110. birthday: '1992-01-31',
  111. book: 'Win',
  112. movie: 'Jobs',
  113. music: 'Don’t Cry'
  114. },
  115. {
  116. name: 'Jon Snow',
  117. age: 26,
  118. address: 'Ottawa No. 2 Lake Park',
  119. job: 'Data Analyst',
  120. interest: 'snooker',
  121. birthday: '1988-7-25',
  122. book: 'A Dream in Red Mansions',
  123. movie: 'A Chinese Ghost Story',
  124. music: 'actor'
  125. }
  126. ]
  127. }
  128. }
  129. }
  130. </script>

Table 表格 - 图15

表头分组

给 column 设置 children,可以渲染出分组表头。

  1. <template>
  2. <Table :columns="columns11" :data="data10" border height="500"></Table>
  3. </template>
  4. <script>
  5. export default {
  6. data () {
  7. return {
  8. columns11: [
  9. {
  10. title: 'Name',
  11. key: 'name',
  12. align: 'center',
  13. width: 200,
  14. fixed: 'left',
  15. filters: [
  16. {
  17. label: 'Joe',
  18. value: 1
  19. },
  20. {
  21. label: 'John',
  22. value: 2
  23. }
  24. ],
  25. filterMultiple: false,
  26. filterMethod (value, row) {
  27. if (value === 1) {
  28. return row.name === 'Joe';
  29. } else if (value === 2) {
  30. return row.name === 'John Brown';
  31. }
  32. }
  33. },
  34. {
  35. title: 'Other',
  36. align: 'center',
  37. children: [
  38. {
  39. title: 'Age',
  40. key: 'age',
  41. align: 'center',
  42. width: 200,
  43. sortable: true
  44. },
  45. {
  46. title: 'Address',
  47. align: 'center',
  48. children: [
  49. {
  50. title: 'Street',
  51. key: 'street',
  52. align: 'center',
  53. width: 200
  54. },
  55. {
  56. title: 'Block',
  57. align: 'center',
  58. children: [
  59. {
  60. title: 'Building',
  61. key: 'building',
  62. align: 'center',
  63. width: 200,
  64. sortable: true
  65. },
  66. {
  67. title: 'Door No.',
  68. key: 'door',
  69. align: 'center',
  70. width: 200
  71. }
  72. ]
  73. }
  74. ]
  75. }
  76. ]
  77. },
  78. {
  79. title: 'Company',
  80. align: 'center',
  81. children: [
  82. {
  83. title: 'Company Address',
  84. key: 'caddress',
  85. align: 'center',
  86. width: 200
  87. },
  88. {
  89. title: 'Company Name',
  90. key: 'cname',
  91. align: 'center',
  92. width: 200
  93. }
  94. ]
  95. },
  96. {
  97. title: 'Gender',
  98. key: 'gender',
  99. align: 'center',
  100. width: 200,
  101. fixed: 'right'
  102. }
  103. ],
  104. data10: []
  105. }
  106. },
  107. mounted () {
  108. const data = [];
  109. for (let i = 0; i < 20; i++) {
  110. data.push({
  111. key: i,
  112. name: 'John Brown',
  113. age: i + 1,
  114. street: 'Lake Park',
  115. building: 'C',
  116. door: 2035,
  117. caddress: 'Lake Street 42',
  118. cname: 'SoftLake Co',
  119. gender: 'M',
  120. });
  121. }
  122. this.data10 = data;
  123. }
  124. }
  125. </script>

Table 表格 - 图16

加载中

通过设置属性 loading 可以让表格处于加载中状态,在异步请求数据、分页时建议使用。

  1. <template>
  2. <div>
  3. <Table :loading="loading" :columns="columns1" :data="data1"></Table>
  4. <br>
  5. Change Loading Status <Switch v-model="loading"></Switch>
  6. </div>
  7. </template>
  8. <script>
  9. export default {
  10. data () {
  11. return {
  12. loading: true,
  13. columns1: [
  14. {
  15. title: 'Name',
  16. key: 'name'
  17. },
  18. {
  19. title: 'Age',
  20. key: 'age'
  21. },
  22. {
  23. title: 'Address',
  24. key: 'address'
  25. }
  26. ],
  27. data1: [
  28. {
  29. name: 'John Brown',
  30. age: 18,
  31. address: 'New York No. 1 Lake Park',
  32. date: '2016-10-03'
  33. },
  34. {
  35. name: 'Jim Green',
  36. age: 24,
  37. address: 'London No. 1 Lake Park',
  38. date: '2016-10-01'
  39. },
  40. {
  41. name: 'Joe Black',
  42. age: 30,
  43. address: 'Sydney No. 1 Lake Park',
  44. date: '2016-10-02'
  45. },
  46. {
  47. name: 'Jon Snow',
  48. age: 26,
  49. address: 'Ottawa No. 2 Lake Park',
  50. date: '2016-10-04'
  51. }
  52. ]
  53. }
  54. }
  55. }
  56. </script>

Table 表格 - 图17

尺寸

通过设置属性 sizelargesmall 可以调整表格尺寸为大或小,默认不填或填写 default 为中。

  1. <template>
  2. <Table size="large" :columns="columns1" :data="data1"></Table>
  3. <Table size="small" :columns="columns1" :data="data1"></Table>
  4. </template>
  5. <script>
  6. export default {
  7. data () {
  8. return {
  9. columns1: [
  10. {
  11. title: 'Name',
  12. key: 'name'
  13. },
  14. {
  15. title: 'Age',
  16. key: 'age'
  17. },
  18. {
  19. title: 'Address',
  20. key: 'address'
  21. }
  22. ],
  23. data1: [
  24. {
  25. name: 'John Brown',
  26. age: 18,
  27. address: 'New York No. 1 Lake Park',
  28. date: '2016-10-03'
  29. },
  30. {
  31. name: 'Jim Green',
  32. age: 24,
  33. address: 'London No. 1 Lake Park',
  34. date: '2016-10-01'
  35. },
  36. {
  37. name: 'Joe Black',
  38. age: 30,
  39. address: 'Sydney No. 1 Lake Park',
  40. date: '2016-10-02'
  41. },
  42. {
  43. name: 'Jon Snow',
  44. age: 26,
  45. address: 'Ottawa No. 2 Lake Park',
  46. date: '2016-10-04'
  47. }
  48. ]
  49. }
  50. }
  51. }
  52. </script>

Table 表格 - 图18

导出csv

通过调用 exportCsv() 方法,可以将数据导出为 .csv 的表格文件,详见 API。

说明:

  • 支持IE9~IE11、Edge、Chrome、Safari、Firefox 全系列浏览器。
  • IE9、Safari 需要手动修改后缀名为 .csv
  • IE9暂时只支持英文,中文会显示为乱码。
  1. <template>
  2. <Table :columns="columns8" :data="data7" size="small" ref="table"></Table>
  3. <br>
  4. <Button type="primary" size="large" @click="exportData(1)"><Icon type="ios-download-outline"></Icon> Export source data</Button>
  5. <Button type="primary" size="large" @click="exportData(2)"><Icon type="ios-download-outline"></Icon> Export sorting and filtered data</Button>
  6. <Button type="primary" size="large" @click="exportData(3)"><Icon type="ios-download-outline"></Icon> Export custom data</Button>
  7. </template>
  8. <script>
  9. export default {
  10. data () {
  11. return {
  12. columns8: [
  13. {
  14. "title": "Name",
  15. "key": "name",
  16. "fixed": "left",
  17. "width": 200
  18. },
  19. {
  20. "title": "Show",
  21. "key": "show",
  22. "width": 150,
  23. "sortable": true,
  24. filters: [
  25. {
  26. label: 'Greater than 4000',
  27. value: 1
  28. },
  29. {
  30. label: 'Less than 4000',
  31. value: 2
  32. }
  33. ],
  34. filterMultiple: false,
  35. filterMethod (value, row) {
  36. if (value === 1) {
  37. return row.show > 4000;
  38. } else if (value === 2) {
  39. return row.show < 4000;
  40. }
  41. }
  42. },
  43. {
  44. "title": "Weak",
  45. "key": "weak",
  46. "width": 150,
  47. "sortable": true
  48. },
  49. {
  50. "title": "Signin",
  51. "key": "signin",
  52. "width": 150,
  53. "sortable": true
  54. },
  55. {
  56. "title": "Click",
  57. "key": "click",
  58. "width": 150,
  59. "sortable": true
  60. },
  61. {
  62. "title": "Active",
  63. "key": "active",
  64. "width": 150,
  65. "sortable": true
  66. },
  67. {
  68. "title": "7, retained",
  69. "key": "day7",
  70. "width": 150,
  71. "sortable": true
  72. },
  73. {
  74. "title": "30, retained",
  75. "key": "day30",
  76. "width": 150,
  77. "sortable": true
  78. },
  79. {
  80. "title": "The next day left",
  81. "key": "tomorrow",
  82. "width": 150,
  83. "sortable": true
  84. },
  85. {
  86. "title": "Day Active",
  87. "key": "day",
  88. "width": 150,
  89. "sortable": true
  90. },
  91. {
  92. "title": "Week Active",
  93. "key": "week",
  94. "width": 150,
  95. "sortable": true
  96. },
  97. {
  98. "title": "Month Active",
  99. "key": "month",
  100. "width": 150,
  101. "sortable": true
  102. }
  103. ],
  104. data7: [
  105. {
  106. "name": "Name1",
  107. "fav": 0,
  108. "show": 7302,
  109. "weak": 5627,
  110. "signin": 1563,
  111. "click": 4254,
  112. "active": 1438,
  113. "day7": 274,
  114. "day30": 285,
  115. "tomorrow": 1727,
  116. "day": 558,
  117. "week": 4440,
  118. "month": 5610
  119. },
  120. {
  121. "name": "Name2",
  122. "fav": 0,
  123. "show": 4720,
  124. "weak": 4086,
  125. "signin": 3792,
  126. "click": 8690,
  127. "active": 8470,
  128. "day7": 8172,
  129. "day30": 5197,
  130. "tomorrow": 1684,
  131. "day": 2593,
  132. "week": 2507,
  133. "month": 1537
  134. },
  135. {
  136. "name": "Name3",
  137. "fav": 0,
  138. "show": 7181,
  139. "weak": 8007,
  140. "signin": 8477,
  141. "click": 1879,
  142. "active": 16,
  143. "day7": 2249,
  144. "day30": 3450,
  145. "tomorrow": 377,
  146. "day": 1561,
  147. "week": 3219,
  148. "month": 1588
  149. },
  150. {
  151. "name": "Name4",
  152. "fav": 0,
  153. "show": 9911,
  154. "weak": 8976,
  155. "signin": 8807,
  156. "click": 8050,
  157. "active": 7668,
  158. "day7": 1547,
  159. "day30": 2357,
  160. "tomorrow": 7278,
  161. "day": 5309,
  162. "week": 1655,
  163. "month": 9043
  164. },
  165. {
  166. "name": "Name5",
  167. "fav": 0,
  168. "show": 934,
  169. "weak": 1394,
  170. "signin": 6463,
  171. "click": 5278,
  172. "active": 9256,
  173. "day7": 209,
  174. "day30": 3563,
  175. "tomorrow": 8285,
  176. "day": 1230,
  177. "week": 4840,
  178. "month": 9908
  179. },
  180. {
  181. "name": "Name6",
  182. "fav": 0,
  183. "show": 6856,
  184. "weak": 1608,
  185. "signin": 457,
  186. "click": 4949,
  187. "active": 2909,
  188. "day7": 4525,
  189. "day30": 6171,
  190. "tomorrow": 1920,
  191. "day": 1966,
  192. "week": 904,
  193. "month": 6851
  194. },
  195. {
  196. "name": "Name7",
  197. "fav": 0,
  198. "show": 5107,
  199. "weak": 6407,
  200. "signin": 4166,
  201. "click": 7970,
  202. "active": 1002,
  203. "day7": 8701,
  204. "day30": 9040,
  205. "tomorrow": 7632,
  206. "day": 4061,
  207. "week": 4359,
  208. "month": 3676
  209. },
  210. {
  211. "name": "Name8",
  212. "fav": 0,
  213. "show": 862,
  214. "weak": 6520,
  215. "signin": 6696,
  216. "click": 3209,
  217. "active": 6801,
  218. "day7": 6364,
  219. "day30": 6850,
  220. "tomorrow": 9408,
  221. "day": 2481,
  222. "week": 1479,
  223. "month": 2346
  224. },
  225. {
  226. "name": "Name9",
  227. "fav": 0,
  228. "show": 567,
  229. "weak": 5859,
  230. "signin": 128,
  231. "click": 6593,
  232. "active": 1971,
  233. "day7": 7596,
  234. "day30": 3546,
  235. "tomorrow": 6641,
  236. "day": 1611,
  237. "week": 5534,
  238. "month": 3190
  239. },
  240. {
  241. "name": "Name10",
  242. "fav": 0,
  243. "show": 3651,
  244. "weak": 1819,
  245. "signin": 4595,
  246. "click": 7499,
  247. "active": 7405,
  248. "day7": 8710,
  249. "day30": 5518,
  250. "tomorrow": 428,
  251. "day": 9768,
  252. "week": 2864,
  253. "month": 5811
  254. }
  255. ]
  256. }
  257. },
  258. methods: {
  259. exportData (type) {
  260. if (type === 1) {
  261. this.$refs.table.exportCsv({
  262. filename: 'The original data'
  263. });
  264. } else if (type === 2) {
  265. this.$refs.table.exportCsv({
  266. filename: 'Sorting and filtering data',
  267. original: false
  268. });
  269. } else if (type === 3) {
  270. this.$refs.table.exportCsv({
  271. filename: 'Custom data',
  272. columns: this.columns8.filter((col, index) => index < 4),
  273. data: this.data7.filter((data, index) => index < 4)
  274. });
  275. }
  276. }
  277. }
  278. }
  279. </script>

高级示例

以上示例已经基本涵盖了表格组件的所有功能,我们根据实际业务场景,增加了一些较为复杂的示例,可以结合来看,更深入了解表格组件的使用。

API

Table props

属性说明类型默认值
data显示的结构化数据,其中,字段 cellClassName 用于设置任意单元格的样式名称,因此数据不能使用该字段,详见示例特定样式Array[]
columns表格列的配置描述,具体项见后文Array[]
stripe是否显示间隔斑马纹Booleanfalse
border是否显示纵向边框Booleanfalse
show-header是否显示表头Booleantrue
width表格宽度,单位 pxNumber | String自动
height表格高度,单位 px,设置后,如果表格内容大于此值,会固定表头Number | String-
max-height 3.4.0表格最大高度,单位 px,设置后,如果表格内容大于此值,会固定表头Number | String-
loading表格是否加载中Booleanfalse
disabled-hover禁用鼠标悬停时的高亮Booleanfalse
highlight-row是否支持高亮选中的行,即单选Booleanfalse
row-class-name 行的 className 的回调方法,传入参数:
- row:当前行数据
- index:当前行的索引
Function-
size表格尺寸,可选值为 largesmalldefault 或者不填String-
no-data-text数据为空时显示的提示内容String暂无数据
no-filtered-data-text筛选数据为空时显示的提示内容String暂无筛选结果
draggable 3.3.0是否开启拖拽调整行顺序,需配合 @on-drag-drop 事件使用Booleanfalse
tooltip-theme 3.3.0列使用 tooltip 时,配置它的主题,可选值为 dark 或 lightStringdark
row-key 3.4.0是否强制使用内置的 row-key,开启后可能会影响性能Booleanfalse

Table events

事件名说明返回值
on-current-change开启 highlight-row 后有效,当表格的当前行发生变化的时候会触发
- currentRow:当前高亮行的数据
- oldCurrentRow:上一次高亮的数据
on-select在多选模式下有效,选中某一项时触发
- selection:已选项数据
- row:刚选择的项数据
on-select-cancel在多选模式下有效,取消选中某一项时触发
- selection:已选项数据
- row:取消选择的项数据
on-select-all在多选模式下有效,点击全选时触发
- selection:已选项数据
on-select-all-cancel在多选模式下有效,点击取消全选时触发
- selection:已选项数据
on-selection-change在多选模式下有效,只要选中项发生变化时就会触发
- selection:已选项数据
on-sort-change排序时有效,当点击排序时触发
- column:当前列数据
- key:排序依据的指标
- order:排序的顺序,值为 ascdesc
on-filter-change筛选时有效,筛选条件发生变化时触发当前列数据
on-row-click单击某一行时触发
- 当前行的数据
- index
on-row-dblclick双击某一行时触发
- 当前行的数据
- index
on-expand展开或收起某一行时触发
- row:当前行的数据
- status:当前的状态
on-drag-drop 3.3.0拖拽排序松开时触发,返回置换的两行数据索引index1, index2

Table slot

名称说明
header表头
footer页脚
loading加载中

Table methods

方法名说明参数
exportCsv 将数据导出为 .csv 文件,说明:
- 支持IE9~IE11、Edge、Chrome、Safari、Firefox 全系列浏览器。
- IE9、Safari 需要手动修改后缀名为 .csv
- IE9暂时只支持英文,中文会显示为乱码。
params(Object):
- filename 文件名,默认为 table.csv
- original 是否导出为原始数据,默认为 true
- noHeader 不显示表头,默认为 false
- columns 自定义导出的列数据
- data 自定义导出的行数据
- callback 添加此函数后,不会下载,而是返回数据
- separator 数据分隔符,默认是逗号(,)
- quoted 每项数据是否加引号,默认为 false 说明:columns 和 data 需同时声明,声明后将导出指定的数据,建议列数据有自定义render时,可以根据需求自定义导出内容
clearCurrentRow清除高亮项,仅在开启 highlight-row 时可用

column

列描述数据对象,是 columns 中的一项

属性说明类型默认值
type列类型,可选值为 index、selection、expand、htmlString-
title列头显示文字String#
key对应列内容的字段名String-
width列宽Number-
minWidth最小列宽Number-
maxWidth最大列宽Number-
align对齐方式,可选值为 left 左对齐、right 右对齐和 center 居中对齐Stringleft
className列的样式名称String-
fixed列是否固定在左侧或者右侧,可选值为 left 左侧和 right 右侧String-
ellipsis开启后,文本将不换行,超出部分显示为省略号Booleanfalse
tooltip开启后,文本将不换行,超出部分显示为省略号,并用 Tooltip 组件显示完整内容Booleanfalse
render自定义渲染列,使用 Vue 的 Render 函数。传入两个参数,第一个是 h,第二个为对象,包含 row、column 和 index,分别指当前行数据,当前列数据,当前行索引,详见示例。 学习 Render 函数的内容Function-
renderHeader自定义列头显示内容,使用 Vue 的 Render 函数。传入两个参数,第一个是 h,第二个为对象,包含 columnindex,分别为当前列数据和当前列索引。Function-
indexMethodtype 为 index 时可用,自定义序号Function,参数 row 为当前行内容-
sortable对应列是否可以排序,如果设置为 custom,则代表用户希望远程排序,需要监听 Table 的 on-sort-change 事件Boolean | 'custom'false
sortMethod自定义排序使用的方法,接收三个参数 a 、 b 和 type,当设置 sortable: true 时有效。type 值为 asc 和 descFunction-
sortType设置初始化排序。值为 asc 和 descString-
filters过滤数据的选项,格式为数组,数组中每项包含 labelvalue 属性,使用过滤,必须同时配置 filterMethodArray-
filterMethod数据过滤使用的方法,如果是多选的筛选项,对每一条数据会执行多次,任意一次返回 true 就会显示Function-
filterMultiple数据过滤的选项是否多选Booleantrue
filteredValue在初始化时使用过滤,数组,值为需要过滤的 value 集合Array-
filterRemote使用远程过滤Function-
children表头分组Array-