diff --git a/components/table/index.en-US.md b/components/table/index.en-US.md
index 599d21aa6..3324daedb 100644
--- a/components/table/index.en-US.md
+++ b/components/table/index.en-US.md
@@ -36,48 +36,60 @@ const columns = [{
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
| bordered | Whether to show all table borders | boolean | `false` |
-| columns | Columns of table | [ColumnProps](https://git.io/vMMXC)\[] | - |
+| columns | Columns of table | array | - |
| components | Override default table elements | object | - |
| dataSource | Data record array to be displayed | any\[] | - |
| defaultExpandAllRows | Expand all rows initially | boolean | `false` |
| defaultExpandedRowKeys | Initial expanded row keys | string\[] | - |
| expandedRowKeys | Current expanded row keys | string\[] | - |
-| expandedRowRender | Expanded container render for each row | Function(record):ReactNode | - |
+| expandedRowRender | Expanded container render for each row | Function(record):VNode\|slot-scope | - |
| expandRowByClick | Whether to expand row by clicking anywhere in the whole row | boolean | `false` |
-| footer | Table footer renderer | Function(currentPageData) | |
+| footer | Table footer renderer | Function(currentPageData)\|slot-scope | |
| indentSize | Indent size in pixels of tree data | number | 15 |
-| loading | Loading status of table | boolean\|[object](https://ant.design/components/spin-cn/#API) ([more](https://github.com/ant-design/ant-design/issues/4544#issuecomment-271533135)) | `false` |
-| locale | i18n text including filter, sort, empty text, etc | object | filterConfirm: 'Ok'
filterReset: 'Reset'
emptyText: 'No Data'
[Default](https://github.com/ant-design/ant-design/issues/575#issuecomment-159169511) |
-| pagination | Pagination [config](/components/pagination/), hide it by setting it to `false` | object | |
+| loading | Loading status of table | boolean\|[object](https://vuecomponent.github.io/ant-design/#/us/components/spin) | `false` |
+| locale | i18n text including filter, sort, empty text, etc | object | filterConfirm: 'Ok'
filterReset: 'Reset'
emptyText: 'No Data' |
+| pagination | Pagination [config](https://vuecomponent.github.io/ant-design/#/us/components/pagination), hide it by setting it to `false` | object | |
| rowClassName | Row's className | Function(record, index):string | - |
| rowKey | Row's unique key, could be a string or function that returns a string | string\|Function(record):string | `key` |
| rowSelection | Row selection [config](#rowSelection) | object | null |
| scroll | Whether table can be scrolled in x/y direction, `x` or `y` can be a number that indicates the width and height of table body | object | - |
| showHeader | Whether to show table header | boolean | `true` |
| size | Size of table | `default` \| `middle` \| `small` | `default` |
-| title | Table title renderer | Function(currentPageData) | |
-| onChange | Callback executed when pagination, filters or sorter is changed | Function(pagination, filters, sorter) | |
-| onExpand | Callback executed when the row expand icon is clicked | Function(expanded, record) | |
-| onExpandedRowsChange | Callback executed when the expanded rows change | Function(expandedRows) | |
-| onHeaderRow | Set props on per header row | Function(column, index) | - |
-| onRow | Set props on per row | Function(record, index) | - |
+| title | Table title renderer | Function(currentPageData)\|slot-scope | |
+| customHeaderRow | Set props on per header row | Function(column, index) | - |
+| customRow | Set props on per row | Function(record, index) | - |
-#### onRow usage
+### Events
+| Events Name | Description | Arguments |
+| --- | --- | --- |
+| change | Callback executed when pagination, filters or sorter is changed | Function(pagination, filters, sorter) | |
+| expand | Callback executed when the row expand icon is clicked | Function(expanded, record) | |
+| expandedRowsChange | Callback executed when the expanded rows change | Function(expandedRows) | |
-Same as `onRow` `onHeaderRow` `onCell` `onHeaderCell`
+#### customRow usage
+
+Same as `customRow` `customHeaderRow` `customCell` `customHeaderCell`.
+Follow [Vue jsx](https://github.com/vuejs/babel-plugin-transform-vue-jsx) syntax。
```jsx
{
+ customRow={(record) => {
return {
- onClick: () => {}, // click row
- onMouseEnter: () => {}, // mouse enter row
- onXxxx...
+ props: {
+ xxx...
+ },
+ on: {
+ click: () => {}, // click row
+ mouseenter: () => {}, // mouse enter row
+ xxxx...
+ },
};
)}
- onHeaderRow={(column) => {
+ customHeaderRow={(column) => {
return {
- onClick: () => {}, // click header row
+ on: {
+ click: () => {}, // click header row
+ },
};
)}
/>
@@ -93,30 +105,34 @@ One of the Table `columns` prop for describing the table's columns, Column has t
| colSpan | Span of this column's title | number | |
| dataIndex | Display field of the data record, could be set like `a.b.c` | string | - |
| defaultSortOrder | Default order of sorted values: `'ascend'` `'descend'` `null` | string | - |
-| filterDropdown | Customized filter overlay | ReactNode | - |
+| filterDropdown | Customized filter overlay | slot | - |
| filterDropdownVisible | Whether `filterDropdown` is visible | boolean | - |
| filtered | Whether the `dataSource` is filtered | boolean | `false` |
| filteredValue | Controlled filtered value, filter icon will highlight | string\[] | - |
-| filterIcon | Customized filter icon | ReactNode | `false` |
+| filterIcon | Customized filter icon | slot | `false` |
| filterMultiple | Whether multiple filters can be selected | boolean | `true` |
| filters | Filter menu config | object\[] | - |
| fixed | Set column to be fixed: `true`(same as left) `'left'` `'right'` | boolean\|string | `false` |
| key | Unique key of this column, you can ignore this prop if you've set a unique `dataIndex` | string | - |
-| render | Renderer of the table cell. The return value should be a ReactNode, or an object for [colSpan/rowSpan config](#components-table-demo-colspan-rowspan) | Function(text, record, index) {} | - |
+| customRender | Renderer of the table cell. The return value should be a VNode, or an object for colSpan/rowSpan config | Function(text, record, index) {}\|slot-scope | - |
| sorter | Sort function for local sort, see [Array.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)'s compareFunction. If you need sort buttons only, set to `true` | Function\|boolean | - |
| sortOrder | Order of sorted values: `'ascend'` `'descend'` `false` | boolean\|string | - |
-| title | Title of this column | string\|ReactNode | - |
+| title | Title of this column | string\|slot | - |
| width | Width of this column | string\|number | - |
-| onCell | Set props on per cell | Function(record) | - |
-| onFilter | Callback executed when the confirm filter button is clicked | Function | - |
-| onFilterDropdownVisibleChange | Callback executed when `filterDropdownVisible` is changed | function(visible) {} | - |
-| onHeaderCell | Set props on per header cell | Function(column) | - |
+| customCell | Set props on per cell | Function(record) | - |
+| customHeaderCell | Set props on per header cell | Function(column) | - |
+| onFilter | Callback executed when the confirm filter button is clicked, Use as a `filter` event when using template or jsx | Function | - |
+| onFilterDropdownVisibleChange | Callback executed when `filterDropdownVisible` is changed, Use as a `filterDropdownVisible` event when using template or jsx | function(visible) {} | - |
+| slots | When using columns, you can use this property to configure the properties that support the slot, such as `slots: { filterIcon: 'XXX'}` | object | - |
+| scopedSlots | When using columns, you can use this property to configure the properties that support the slot-scope, such as `scopedSlots: { customRender: 'XXX'}` | object | - |
+
### ColumnGroup
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
-| title | Title of the column group | string\|ReactNode | - |
+| title | Title of the column group | string\|slot | - |
+| slots | When using columns, you can use this property to configure the properties that support the slot, such as `slots: { title: 'XXX'}` | object | - |
### rowSelection
@@ -140,7 +156,7 @@ Properties for row selection.
| Property | Description | Type | Default |
| -------- | ----------- | ---- | ------- |
| key | Unique key of this selection | string | - |
-| text | Display text of this selection | string\|React.ReactNode | - |
+| text | Display text of this selection | string\|VNode | - |
| onSelect | Callback executed when this selection is clicked | Function(changeableRowKeys) | - |
diff --git a/components/table/index.zh-CN.md b/components/table/index.zh-CN.md
index f7bf04e39..0c3fdf121 100644
--- a/components/table/index.zh-CN.md
+++ b/components/table/index.zh-CN.md
@@ -35,51 +35,64 @@ const columns = [{
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
+| className | 列的 className | string | - |
| bordered | 是否展示外边框和列边框 | boolean | false |
-| columns | 表格列的配置描述,具体项见下表 | [ColumnProps](https://git.io/vMMXC)\[] | - |
+| columns | 表格列的配置描述,具体项见下表 | array | - |
| components | 覆盖默认的 table 元素 | object | - |
| dataSource | 数据数组 | any\[] | |
| defaultExpandAllRows | 初始时,是否展开所有行 | boolean | false |
| defaultExpandedRowKeys | 默认展开的行 | string\[] | - |
| expandedRowKeys | 展开的行,控制属性 | string\[] | - |
-| expandedRowRender | 额外的展开行 | Function(record):ReactNode | - |
+| expandedRowRender | 额外的展开行 | Function(record):VNode\|slot-scope| - |
| expandRowByClick | 通过点击行来展开子行 | boolean | `false` |
-| footer | 表格尾部 | Function(currentPageData) | |
+| footer | 表格尾部 | Function(currentPageData)\|slot-scope | |
| indentSize | 展示树形数据时,每层缩进的宽度,以 px 为单位 | number | 15 |
-| loading | 页面是否加载中 | boolean\|[object](https://ant.design/components/spin-cn/#API) ([更多](https://github.com/ant-design/ant-design/issues/4544#issuecomment-271533135)) | false |
-| locale | 默认文案设置,目前包括排序、过滤、空数据文案 | object | filterConfirm: '确定'
filterReset: '重置'
emptyText: '暂无数据'
[默认值](https://github.com/ant-design/ant-design/issues/575#issuecomment-159169511) |
-| pagination | 分页器,配置项参考 [pagination](/components/pagination/),设为 false 时不展示和进行分页 | object | |
+| loading | 页面是否加载中 | boolean\|[object](https://vuecomponent.github.io/ant-design/#/cn/components/spin) | false |
+| locale | 默认文案设置,目前包括排序、过滤、空数据文案 | object | filterConfirm: '确定'
filterReset: '重置'
emptyText: '暂无数据' |
+| pagination | 分页器,配置项参考 [pagination](https://vuecomponent.github.io/ant-design/#/cn/components/pagination),设为 false 时不展示和进行分页 | object | |
| rowClassName | 表格行的类名 | Function(record, index):string | - |
| rowKey | 表格行 key 的取值,可以是字符串或一个函数 | string\|Function(record):string | 'key' |
| rowSelection | 列表项是否可选择,[配置项](#rowSelection) | object | null |
| scroll | 横向或纵向支持滚动,也可用于指定滚动区域的宽高度:`{{ x: true, y: 300 }}` | object | - |
| showHeader | 是否显示表头 | boolean | true |
| size | 正常或迷你类型,`default` or `small` | string | default |
-| title | 表格标题 | Function(currentPageData) | |
-| onChange | 分页、排序、筛选变化时触发 | Function(pagination, filters, sorter) | |
-| onExpand | 点击展开图标时触发 | Function(expanded, record) | |
-| onExpandedRowsChange | 展开的行变化时触发 | Function(expandedRows) | |
-| onHeaderRow | 设置头部行属性 | Function(column, index) | - |
-| onRow | 设置行属性 | Function(record, index) | - |
+| title | 表格标题 | Function(currentPageData)\|slot-scope | |
+| customHeaderRow | 设置头部行属性 | Function(column, index) | - |
+| customRow | 设置行属性 | Function(record, index) | - |
+### 事件
+| 事件名称 | 说明 | 回调参数 |
+| --- | --- | --- |
+| expandedRowsChange | 展开的行变化时触发 | Function(expandedRows) |
+| change | 分页、排序、筛选变化时触发 | Function(pagination, filters, sorter) |
+| expand | 点击展开图标时触发 | Function(expanded, record) |
-#### onRow 用法
-适用于 `onRow` `onHeaderRow` `onCell` `onHeaderCell`。
-遵循Vue [jsx语法](https://github.com/vuejs/babel-plugin-transform-vue-jsx)
+#### customRow 用法
+
+适用于 `customRow` `customHeaderRow` `customCell` `customHeaderCell`。
+遵循[Vue jsx](https://github.com/vuejs/babel-plugin-transform-vue-jsx)语法。
```jsx
{
+ customRow={(record) => {
return {
- onClick: () => {}, // 点击行
- onMouseEnter: () => {}, // 鼠标移入行
- onXxxx...
+ props: {
+ xxx... //属性
+ },
+ on: { // 事件
+ click: () => {}, // 点击行
+ mouseenter: () => {}, // 鼠标移入行
+ xxxx...
+ },
+
};
)}
- onHeaderRow={(column) => {
+ customHeaderRow={(column) => {
return {
- onClick: () => {}, // 点击表头行
+ on: {
+ click: () => {}, // 点击表头行
+ }
};
)}
/>
@@ -101,23 +114,25 @@ const columns = [{
| filterMultiple | 是否多选 | boolean | true |
| filters | 表头的筛选菜单项 | object\[] | - |
| fixed | 列是否固定,可选 `true`(等效于 left) `'left'` `'right'` | boolean\|string | false |
-| key | React 需要的 key,如果已经设置了唯一的 `dataIndex`,可以忽略这个属性 | string | - |
-| customRender | 生成复杂数据的渲染函数,参数分别为当前行的值,当前行数据,行索引,@return里面可以设置表格行/列合并,可参考demo 表格行/列合并 | Function(text, record, index) {} | - |
+| key | Vue 需要的 key,如果已经设置了唯一的 `dataIndex`,可以忽略这个属性 | string | - |
+| customRender | 生成复杂数据的渲染函数,参数分别为当前行的值,当前行数据,行索引,@return里面可以设置表格行/列合并,可参考demo 表格行/列合并 | Function(text, record, index) {}\|slot-scope | - |
| sorter | 排序函数,本地排序使用一个函数(参考 [Array.sort](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) 的 compareFunction),需要服务端排序可设为 true | Function\|boolean | - |
| sortOrder | 排序的受控属性,外界可用此控制列的排序,可设置为 `'ascend'` `'descend'` `false` | boolean\|string | - |
| title | 列头显示文字 | string\|slot | - |
| width | 列宽度 | string\|number | - |
-| onCell | 设置单元格属性 | Function(record) | - |
+| customCell | 设置单元格属性 | Function(record) | - |
| customHeaderCell | 设置头部单元格属性 | Function(column) | - |
| onFilter | 本地模式下,确定筛选的运行函数, 使用template或jsx时作为`filter`事件使用 | Function | - |
-| onFilterDropdownVisibleChange | 自定义筛选菜单可见变化时调用,使用template或jsx时作为`filter`事件使用 | function(visible) {} | - |
-
+| onFilterDropdownVisibleChange | 自定义筛选菜单可见变化时调用,使用template或jsx时作为`filterDropdownVisibleChange`事件使用 | function(visible) {} | - |
+| slots | 使用columns时,可以通过该属性配置支持slot的属性,如 `slots: { filterIcon: 'XXX'}` | object | - |
+| scopedSlots | 使用columns时,可以通过该属性配置支持slot-scope的属性,如 `scopedSlots: { customRender: 'XXX'}` | object | - |
### ColumnGroup
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| title | 列头显示文字 | string\|slot | - |
+| slots | 使用columns时,可以通过该属性配置支持slot的属性,如 `slots: { title: 'XXX'}` | object | - |
### rowSelection
diff --git a/components/table/interface.js b/components/table/interface.js
index 9b08d45e1..249af7997 100644
--- a/components/table/interface.js
+++ b/components/table/interface.js
@@ -18,6 +18,8 @@ export const ColumnProps = {
// key?: React.Key;
dataIndex: PropTypes.string,
customRender: PropTypes.func,
+ customCell: PropTypes.func,
+ customHeaderCell: PropTypes.func,
filters: PropTypes.arrayOf(ColumnFilterItem),
// onFilter: (value: any, record: T) => PropTypes.bool,
filterMultiple: PropTypes.bool,
diff --git a/components/vc-table/demo/rowAndCellClick.js b/components/vc-table/demo/rowAndCellClick.js
index dfe244527..66654c6ec 100644
--- a/components/vc-table/demo/rowAndCellClick.js
+++ b/components/vc-table/demo/rowAndCellClick.js
@@ -14,33 +14,6 @@ const onRowDoubleClick = (record, index, e) => {
console.log(`Double click nth(${index}) row of parent, record.name: ${record.name}`, e)
}
-const columns = [{
- title: 'Name',
- dataIndex: 'name',
- key: 'name',
- width: 400,
-}, {
- title: 'Age',
- dataIndex: 'age',
- key: 'age',
- width: 100,
- render: (h, text) => (
- {text} (Trigger Cell Click)
- ),
- onCell: (record) => ({
- on: {
- click (e) {
- console.log('Click cell', record, e.target)
- },
- },
- }),
-}, {
- title: 'Address',
- dataIndex: 'address',
- key: 'address',
- width: 200,
-}]
-
const data = [{
key: 1,
name: 'a',
@@ -94,6 +67,32 @@ const data = [{
export default {
render () {
+ const columns = [{
+ title: 'Name',
+ dataIndex: 'name',
+ key: 'name',
+ width: 400,
+ }, {
+ title: 'Age',
+ dataIndex: 'age',
+ key: 'age',
+ width: 100,
+ customRender: (text) => (
+ {text} (Trigger Cell Click)
+ ),
+ customCell: (record) => ({
+ on: {
+ click (e) {
+ console.log('Click cell', record, e.target)
+ },
+ },
+ }),
+ }, {
+ title: 'Address',
+ dataIndex: 'address',
+ key: 'address',
+ width: 200,
+ }]
return (