Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
E
Element
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
林焕东
Element
Commits
4ebdd6a6
Commit
4ebdd6a6
authored
Nov 18, 2016
by
cinwell.li
Committed by
Leopoldthecoder
Nov 18, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Table: add context prop (#1161)
parent
ffc136fa
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
122 additions
and
3 deletions
+122
-3
examples/docs/zh-CN/table.md
examples/docs/zh-CN/table.md
+111
-2
packages/table/src/table-body.js
packages/table/src/table-body.js
+2
-1
packages/table/src/table-column.js
packages/table/src/table-column.js
+6
-0
packages/table/src/table.vue
packages/table/src/table.vue
+3
-0
No files found.
examples/docs/zh-CN/table.md
View file @
4ebdd6a6
...
@@ -110,6 +110,18 @@
...
@@ -110,6 +110,18 @@
},
},
methods: {
methods: {
handleClick() {
console.log('click');
},
handleEdit(index, row) {
console.log(index, row);
},
handleDelete(index, row) {
console.log(index, row);
},
handleSelectionChange(val) {
handleSelectionChange(val) {
this.multipleSelection = val;
this.multipleSelection = val;
},
},
...
@@ -512,11 +524,12 @@
...
@@ -512,11 +524,12 @@
</el-table-column>
</el-table-column>
<el-table-column
<el-table-column
inline-template
inline-template
:context=
"_self"
fixed=
"right"
fixed=
"right"
label=
"操作"
label=
"操作"
width=
"100"
>
width=
"100"
>
<span>
<span>
<el-button
type=
"text"
size=
"small"
>
查看
</el-button>
<el-button
@
click=
"handleClick"
type=
"text"
size=
"small"
>
查看
</el-button>
<el-button
type=
"text"
size=
"small"
>
编辑
</el-button>
<el-button
type=
"text"
size=
"small"
>
编辑
</el-button>
</span>
</span>
</el-table-column>
</el-table-column>
...
@@ -525,6 +538,12 @@
...
@@ -525,6 +538,12 @@
<script>
<script>
export
default
{
export
default
{
methods
:
{
handleClick
()
{
console
.
log
(
1
);
}
},
data
()
{
data
()
{
return
{
return
{
tableData
:
[{
tableData
:
[{
...
@@ -962,6 +981,94 @@
...
@@ -962,6 +981,94 @@
```
```
:::
:::
### 自定义列模板
自定义列的显示内容,可组合其他组件使用。
:::demo 通过设置
`inline-template`
属性可以开启自定义模板功能,此时
`el-table-column`
的上下文指的是
`el-table`
所处的上下文,当然你可以通过
`context`
属性指定上下文环境,例如设置成
`:context="_self"`
就是指的当前上下文。有些时候我们会把 table 封装在其他组件里,通过 slot 设置
`table-column`
,这样的话就要注意设置
`context`
。在 column 组件内部,可以获取到 row, column, $index 和 store(table 内部的状态管理)的数据。
```
html
<template>
<el-table
:data=
"tableData"
border
style=
"width: 100%"
>
<el-table-column
inline-template
label=
"日期"
width=
"180"
>
<div>
<el-icon
name=
"time"
></el-icon>
<span
style=
"margin-left: 10px"
>
{{ row.date }}
</span>
</div>
</el-table-column>
<el-table-column
inline-template
label=
"姓名"
width=
"180"
>
<el-popover
trigger=
"hover"
placement=
"top"
>
<p>
姓名: {{ row.name }}
</p>
<p>
住址: {{ row.address }}
</p>
<div
slot=
"reference"
>
<el-tag>
{{ row.name }}
</el-tag>
</div>
</el-popover>
</el-table-column>
<el-table-column
:context=
"_self"
inline-template
label=
"操作"
>
<div>
<el-button
size=
"small"
@
click=
"handleEdit($index, row)"
>
编辑
</el-button>
<el-button
size=
"small"
type=
"danger"
@
click=
"handleDelete($index, row)"
>
删除
</el-button>
</div>
</el-table-column>
</el-table>
</template>
<script>
export
default
{
data
()
{
return
{
tableData
:
[{
date
:
'
2016-05-02
'
,
name
:
'
王小虎
'
,
address
:
'
上海市普陀区金沙江路 1518 弄
'
},
{
date
:
'
2016-05-04
'
,
name
:
'
王小虎
'
,
address
:
'
上海市普陀区金沙江路 1517 弄
'
},
{
date
:
'
2016-05-01
'
,
name
:
'
王小虎
'
,
address
:
'
上海市普陀区金沙江路 1519 弄
'
},
{
date
:
'
2016-05-03
'
,
name
:
'
王小虎
'
,
address
:
'
上海市普陀区金沙江路 1516 弄
'
}]
}
},
methods
:
{
handleEdit
(
index
,
row
)
{
console
.
log
(
index
,
row
);
},
handleDelete
(
index
,
row
)
{
console
.
log
(
index
,
row
);
}
}
}
</script>
```
:::
### Table Attributes
### Table Attributes
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---------- |-------------- |---------- |-------------------------------- |-------- |
|---------- |-------------- |---------- |-------------------------------- |-------- |
...
@@ -973,6 +1080,7 @@
...
@@ -973,6 +1080,7 @@
| highlight-current-row | 是否要高亮当前行 | boolean | — | false |
| highlight-current-row | 是否要高亮当前行 | boolean | — | false |
| row-class-name | 行的 className 的回调。 | Function(row, index) | — | — |
| row-class-name | 行的 className 的回调。 | Function(row, index) | — | — |
| row-key | 行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能的情况下,该属性是必填的 | Function(row)/String | — | — |
| row-key | 行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能的情况下,该属性是必填的 | Function(row)/String | — | — |
| context | 设置上下文环境,例如设置当前上下文就是
`_self`
,父级就是
`$parent`
,根组件
`$root`
。优先读取 column 的 context 属性。 | Object | - | Table 所处上下文 |
### Table Events
### Table Events
| 事件名 | 说明 | 参数 |
| 事件名 | 说明 | 参数 |
...
@@ -1008,7 +1116,8 @@
...
@@ -1008,7 +1116,8 @@
| resizable | 对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真) | boolean | — | true |
| resizable | 对应列是否可以通过拖动改变宽度(需要在 el-table 上设置 border 属性为真) | boolean | — | true |
| formatter | 用来格式化内容 | Function(row, column) | — | — |
| formatter | 用来格式化内容 | Function(row, column) | — | — |
| show-overflow-tooltip | 当内容过长被隐藏时显示 tooltip | Boolean | — | false |
| show-overflow-tooltip | 当内容过长被隐藏时显示 tooltip | Boolean | — | false |
| inline-template | 指定该属性后可以自定义 column 模板,参考多选的时间列,通过 row 获取行信息,JSX 里通过 _self 获取当前上下文。此时不需要配置 prop 属性。总共可以获取到
`{ row(当前行), column(当前列), $index(行数), _self(当前上下文), store(table store) }`
的信息。 | — | — |
| context | 设置上下文环境,例如设置当前上下文就是
`_self`
,父级就是
`$parent`
,根组件
`$root`
| Object | - | Table 所处上下文 |
| inline-template | 指定该属性后可以自定义 column 模板,参考多选的时间列,通过 row 获取行信息。总共可以获取到
`{ row(当前行), column(当前列), $index(行数), store(table store) }`
以及 Table 所处的上下文环境。 | — | — |
| align | 对齐方式 | String | left, center, right | left |
| align | 对齐方式 | String | left, center, right | left |
| class-name | 列的 className | string | — | — |
| class-name | 列的 className | string | — | — |
| selectable | 仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选 | Function(row, index) | — | — |
| selectable | 仅对 type=selection 的列有效,类型为 Function,Function 的返回值用来决定这一行的 CheckBox 是否可以勾选 | Function(row, index) | — | — |
...
...
packages/table/src/table-body.js
View file @
4ebdd6a6
...
@@ -5,6 +5,7 @@ export default {
...
@@ -5,6 +5,7 @@ export default {
store
:
{
store
:
{
required
:
true
required
:
true
},
},
context
:
{},
layout
:
{
layout
:
{
required
:
true
required
:
true
},
},
...
@@ -43,7 +44,7 @@ export default {
...
@@ -43,7 +44,7 @@ export default {
on
-
mouseenter
=
{
(
$event
)
=>
this
.
handleCellMouseEnter
(
$event
,
row
)
}
on
-
mouseenter
=
{
(
$event
)
=>
this
.
handleCellMouseEnter
(
$event
,
row
)
}
on
-
mouseleave
=
{
this
.
handleCellMouseLeave
}
>
on
-
mouseleave
=
{
this
.
handleCellMouseLeave
}
>
{
{
column
.
renderCell
.
call
(
this
.
_renderProxy
,
h
,
{
row
,
column
,
$index
,
store
:
this
.
store
,
_self
:
this
.
$parent
.
$vnode
.
context
})
column
.
renderCell
.
call
(
this
.
_renderProxy
,
h
,
{
row
,
column
,
$index
,
store
:
this
.
store
,
_self
:
this
.
context
||
this
.
$parent
.
$vnode
.
context
})
}
}
<
/td
>
<
/td
>
)
)
...
...
packages/table/src/table-column.js
View file @
4ebdd6a6
...
@@ -100,6 +100,7 @@ export default {
...
@@ -100,6 +100,7 @@ export default {
type
:
Boolean
,
type
:
Boolean
,
default
:
true
default
:
true
},
},
context
:
{},
align
:
String
,
align
:
String
,
showTooltipWhenOverflow
:
Boolean
,
showTooltipWhenOverflow
:
Boolean
,
showOverflowTooltip
:
Boolean
,
showOverflowTooltip
:
Boolean
,
...
@@ -186,6 +187,7 @@ export default {
...
@@ -186,6 +187,7 @@ export default {
minWidth
,
minWidth
,
width
,
width
,
isColumnGroup
,
isColumnGroup
,
context
:
this
.
context
,
align
:
this
.
align
?
'
is-
'
+
this
.
align
:
null
,
align
:
this
.
align
?
'
is-
'
+
this
.
align
:
null
,
sortable
:
this
.
sortable
,
sortable
:
this
.
sortable
,
sortMethod
:
this
.
sortMethod
,
sortMethod
:
this
.
sortMethod
,
...
@@ -211,6 +213,7 @@ export default {
...
@@ -211,6 +213,7 @@ export default {
column
.
renderCell
=
function
(
h
,
data
)
{
column
.
renderCell
=
function
(
h
,
data
)
{
if
(
_self
.
$vnode
.
data
.
inlineTemplate
)
{
if
(
_self
.
$vnode
.
data
.
inlineTemplate
)
{
renderCell
=
function
()
{
renderCell
=
function
()
{
data
.
_self
=
_self
.
context
||
data
.
_self
;
if
(
Object
.
prototype
.
toString
.
call
(
data
.
_self
)
===
'
[object Object]
'
)
{
if
(
Object
.
prototype
.
toString
.
call
(
data
.
_self
)
===
'
[object Object]
'
)
{
for
(
let
prop
in
data
.
_self
)
{
for
(
let
prop
in
data
.
_self
)
{
if
(
!
data
.
hasOwnProperty
(
prop
))
{
if
(
!
data
.
hasOwnProperty
(
prop
))
{
...
@@ -218,6 +221,9 @@ export default {
...
@@ -218,6 +221,9 @@ export default {
}
}
}
}
}
}
// 静态内容会缓存到 _staticTrees 内,不改的话获取的静态数据就不是内部 context
data
.
_staticTrees
=
_self
.
_staticTrees
;
data
.
$options
.
staticRenderFns
=
_self
.
$options
.
staticRenderFns
;
return
_self
.
customRender
.
call
(
data
);
return
_self
.
customRender
.
call
(
data
);
};
};
}
}
...
...
packages/table/src/table.vue
View file @
4ebdd6a6
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
<div
class=
"el-table__body-wrapper"
ref=
"bodyWrapper"
<div
class=
"el-table__body-wrapper"
ref=
"bodyWrapper"
:style=
"
{ height: layout.bodyHeight ? layout.bodyHeight + 'px' : '' }">
:style=
"
{ height: layout.bodyHeight ? layout.bodyHeight + 'px' : '' }">
<table-body
<table-body
:context=
"context"
:store=
"store"
:store=
"store"
:layout=
"layout"
:layout=
"layout"
:row-class-name=
"rowClassName"
:row-class-name=
"rowClassName"
...
@@ -129,6 +130,8 @@
...
@@ -129,6 +130,8 @@
rowKey
:
[
String
,
Function
],
rowKey
:
[
String
,
Function
],
context
:
{},
rowClassName
:
[
String
,
Function
],
rowClassName
:
[
String
,
Function
],
highlightCurrentRow
:
Boolean
,
highlightCurrentRow
:
Boolean
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment