记录数据可能还具有其他特殊的保留名称键,用于为行和单个单元格(变体)着色,以及触发其他行详细信息。 受支持的可选项目记录修改器属性(确保您的字段键与这些名称不冲突):
元素生成唯一的ID。
<tr>
该ID的格式为{table-id}__row_{primary-key-value}
,其中 {table-id}
是<b-table>
的唯一ID 并且主键
指定的字段的项目字段值的最大值。
表格渲染和过渡优化
<b-table>
还使用 主键
帮助Vue优化表行的呈现。 在内部,由主键prop指定的字段键的值用作每个渲染的项目行元素的Vue:key值。 primary-key
如果您看到渲染问题(例如,工具提示隐藏或子组件意外重用,
项目数据更改或数据已排序/过滤/编辑)或表格行转换无效,
主键
道具(如果每行具有唯一的标识符)可以缓解这些问题。
如果您使用的是第三方表转换或拖放插件,则指定主键列很方便,因为它们依赖于每行:key值的一致性和唯一性。
a和拖放插件,因为它们依赖于每行:key值的一致性和唯一性。:key
value.
如果未提供primary-key
,<b-table>
将根据显示行的索引号(即在显示的表行中的位置)自动生成键。
这可能会导致GUI问题,例如使用以前的结果进行渲染的子组件/元素(即被Vue的渲染修补程序优化例程重用)。指定primary-key
列
可以缓解此问题(或者可以在自定义格式化字段槽中的元素/组件上放置unique:key
)。
有关更多详细信息,请参阅表体过度支撑 部分。
表格样式选项
表格样式
<b-table>
提供几个属性来更改表的样式:
属性
类型
说明
striped
Boolean
将斑马线添加到<tbody>
bordered
Boolean
用于表格和单元格所有边上的边框。
borderless
Boolean
从表中删除内部边框。
outlined
Boolean
在桌子的所有边上画一条细线。如果设置了bordered
,则不起作用。
small
Boolean
通过将单元格填充减半使表更紧凑。
hover
Boolean
在<tbody>
中的表行上启用悬停突出显示状态
dark
Boolean
反转颜色-在深色背景上使用浅色文本(相当于Bootstrap v4 class.table-dark
)
fixed
Boolean
生成具有相等固定宽度列的表(table-layout: fixed;
)
responsive
Boolean or String
生成响应表格以使其水平滚动。对于始终响应的表,将其设置为true
,或将其设置为断点'sm'
,
'md'
,
'lg'
,和
'xl'
,
以使表仅在小于断点的屏幕上响应(水平滚动)。请参阅下面的响应表格 以了解详细信息。
sticky-header
Boolean or String
生成带有粘性标题的垂直可滚动表。设置为true
可启用粘性标题(默认表最大高度为300px
px),
或设置为包含高度的字符串(使用CSS单位)可指定300px
px以外的最大高度。有关详细信息,请参阅下面的粘性页眉 部分。
stacked
Boolean or String
生成响应堆栈表。对于始终堆叠的表,将其设置为true
,
或将其设置为断点'sm'
,
'md'
,
'lg'
,和
'xl'
之一,以使表仅在小于断点的屏幕上可视堆叠。有关详细信息,请参见下面的堆叠表格 。
caption-top
Boolean
如果table上有标题,并且此属性设置为true
,则标题将可视地放置在table上方。
如果为false
(默认值),则标题将可视地放置在table下方。
table-variant
String
为表格提供整体主题颜色。
head-variant
String
使用'light'
或'dark'
分别使表格标题显示为浅色或深灰色
foot-variant
String
使用'light'
或'dark'
使表格页脚分别显示为浅灰色或深灰色。
如果未设置,将使用head-variant
。 如果未设置foot-clone
,则无效
foot-clone
Boolean
打开表格页脚,并默认使用与表格页眉相同的内容
no-footer-sorting
Boolean
当 foot-clone
为true并且表可排序时,
将禁用排序图标和对页脚标题单元格的单击行为。 有关更多详细信息,请参阅下面的排序 部分。
no-border-collapse
Boolean
禁用折叠表格边框的默认设置。 主要用于sticky headers 和/或sticky columns 。 在某些情况下会导致出现双边框。
注意:
fixed
,
stacked
,
caption-top
,
no-border-collapse
,粘性标题,粘性列以及表排序功能的表格样式选项均需要Bootstrap Vue自定义CSS。
示例: 基本表格样式
First Name
Last Name
Age
Dickerson
Macdonald
40
Larsen
Shaw
21
Geneva
Wilson
89
<template >
<div >
<b-form-group label ="Table Options" label-cols-lg ="2" >
<b-form-checkbox v-model ="striped" inline > Striped</b-form-checkbox >
<b-form-checkbox v-model ="bordered" inline > Bordered</b-form-checkbox >
<b-form-checkbox v-model ="borderless" inline > Borderless</b-form-checkbox >
<b-form-checkbox v-model ="outlined" inline > Outlined</b-form-checkbox >
<b-form-checkbox v-model ="small" inline > Small</b-form-checkbox >
<b-form-checkbox v-model ="hover" inline > Hover</b-form-checkbox >
<b-form-checkbox v-model ="dark" inline > Dark</b-form-checkbox >
<b-form-checkbox v-model ="fixed" inline > Fixed</b-form-checkbox >
<b-form-checkbox v-model ="footClone" inline > Foot Clone</b-form-checkbox >
<b-form-checkbox v-model ="noCollapse" inline > No border collapse</b-form-checkbox >
</b-form-group >
<b-form-group label ="Head Variant" label-cols-lg ="2" >
<b-form-radio-group v-model ="headVariant" class ="mt-lg-2" >
<b-form-radio :value ="null" inline > None</b-form-radio >
<b-form-radio value ="light" inline > Light</b-form-radio >
<b-form-radio value ="dark" inline > Dark</b-form-radio >
</b-form-radio-group >
</b-form-group >
<b-form-group label ="Table Variant" label-for ="table-style-variant" label-cols-lg ="2" >
<b-form-select
v-model ="tableVariant"
:options ="tableVariants"
id ="table-style-variant"
>
<template v-slot:first >
<option value ="" > -- None --</option >
</template >
</b-form-select >
</b-form-group >
<b-table
:striped ="striped"
:bordered ="bordered"
:borderless ="borderless"
:outlined ="outlined"
:small ="small"
:hover ="hover"
:dark ="dark"
:fixed ="fixed"
:foot-clone ="footClone"
:no-border-collapse ="noCollapse"
:items ="items"
:fields ="fields"
:head-variant ="headVariant"
:table-variant ="tableVariant"
> </b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : ['first_name' , 'last_name' , 'age' ],
items : [
{ age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ age : 89 , first_name : 'Geneva' , last_name : 'Wilson' }
],
tableVariants : [
'primary' ,
'secondary' ,
'info' ,
'danger' ,
'warning' ,
'success' ,
'light' ,
'dark'
],
striped : false ,
bordered : false ,
borderless : false ,
outlined : false ,
small : false ,
hover : false ,
dark : false ,
fixed : false ,
footClone : false ,
headVariant : null ,
tableVariant : '' ,
noCollapse : false
}
}
}
</script >
行样式和属性
您还可以使用tbody-tr-class
属性设置每一行的样式,并可以选择通过tbody-tr-attr
属性提供其他属性:
属性
类型
描述
tbody-tr-class
String, Array or Function
应用于表上每一行的类。 如果给出了一个函数,它将被称为 tbodyTrClass( item, type )
,
并且它可能返回一个Array
,Object
和
String
。
tbody-tr-attr
Object or Function
应用于表上每一行的属性。 如果给出了一个函数,它将被称为tbodyTrAttr( item, type )
,并且它必须返回一个Object
。
将函数引用传递给tbody-tr-class
或
tbody-tr-attr
时,该函数的参数如下:
item
-
项目记录与行关联的数据。 对于与项目记录不相关的行,此值将为null
或
undefined
type
-
呈现的行的类型。 'row'
用于项目行,
'row-details'
用于项目明细行,
'row-top'
用于固定行顶部插槽,
'row-bottom'
用于固定行底部插槽,
或'table-busy'
用于table繁忙时段。
示例: 基本行样式
First Name
Last Name
Age
Dickerson
Macdonald
40
Larsen
Shaw
21
Geneva
Wilson
89
<template >
<div >
<b-table :items ="items" :fields ="fields" :tbody-tr-class ="rowClass" > </b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : ['first_name' , 'last_name' , 'age' ],
items : [
{ age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' , status : 'awesome' },
{ age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ age : 89 , first_name : 'Geneva' , last_name : 'Wilson' }
]
}
},
methods : {
rowClass(item, type) {
if (!item || type !== 'row' ) return
if (item.status === 'awesome' ) return 'table-success'
}
}
}
</script >
响应表格
响应式表格允许轻松地水平滚动表。 通过将prop设置为true
,
使所有表在所有视口中都具有responsive
。
或者,通过将prop设置为响应以下断点值之一来选择最大响应点,以使其具有responsive
:
sm
,
md
,
lg
, 或
xl
.
示例: 始终响应表格
Heading1
Heading2
Heading3
Heading4
Heading5
Heading6
Heading7
Heading8
Heading9
Heading10
Heading11
Heading12
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
table cell
<template >
<div >
<b-table responsive :items ="items" > </b-table >
</div >
</template >
<script >
export default {
data() {
return {
items : [
{
heading1 : 'table cell' ,
heading2 : 'table cell' ,
heading3 : 'table cell' ,
heading4 : 'table cell' ,
heading5 : 'table cell' ,
heading6 : 'table cell' ,
heading7 : 'table cell' ,
heading8 : 'table cell' ,
heading9 : 'table cell' ,
heading10 : 'table cell' ,
heading11 : 'table cell' ,
heading12 : 'table cell'
},
{
heading1 : 'table cell' ,
heading2 : 'table cell' ,
heading3 : 'table cell' ,
heading4 : 'table cell' ,
heading5 : 'table cell' ,
heading6 : 'table cell' ,
heading7 : 'table cell' ,
heading8 : 'table cell' ,
heading9 : 'table cell' ,
heading10 : 'table cell' ,
heading11 : 'table cell' ,
heading12 : 'table cell'
},
{
heading1 : 'table cell' ,
heading2 : 'table cell' ,
heading3 : 'table cell' ,
heading4 : 'table cell' ,
heading5 : 'table cell' ,
heading6 : 'table cell' ,
heading7 : 'table cell' ,
heading8 : 'table cell' ,
heading9 : 'table cell' ,
heading10 : 'table cell' ,
heading11 : 'table cell' ,
heading12 : 'table cell'
}
]
}
}
}
</script >
响应表格注释:
可能的垂直剪切/截断。 响应表格使用overflow-y: hidden
,它会剪裁超出表底部或顶部边缘的所有内容。 特别是,这可能会剪切下拉菜单和其他第三方小部件。
使用responsive
和
fixed
在一起的属性将无法 正常工作。 固定表格布局使用第一行(在这种情况下为表格标题)来计算每一列所需的宽度(以及表格的整体宽度)以适合父容器的宽度-无需考虑
<tbody>
中的单元格- 导致表可能没有响应。 要解决此限制,您将需要通过以下方法之一为列(或某些列)指定宽度:
堆叠表格
作为响应表格的替代方法,BootstrapVue包括堆叠表格选项(使用自定义SCSS / CSS),该选项允许以可视堆叠格式呈现表。 通过将属性stacked
设置为true
,可以在所有视口中堆叠任何表格。 或者,通过将stacked
的prop设置为断点值
'sm'
,
'md'
,
'lg'
和
'xl'
.之一来设置断点,表将在该断点处恢复为正常的表格式。
列标题标签将使用CSS ::before
伪元素呈现在每个字段值的左侧,宽度为40%。
stacked
的属性优先于响应式道具,sticky-header
属性
和stickyColumn
字段定义属性。
示例: Always 堆积表
40
Dickerson
Macdonald
21
Larsen
Shaw
89
Geneva
Wilson
<template >
<div >
<b-table stacked :items ="items" > </b-table >
</div >
</template >
<script >
export default {
data() {
return {
items : [
{ age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ age : 89 , first_name : 'Geneva' , last_name : 'Wilson' }
]
}
}
}
</script >
注意: 当table被视觉上堆叠时:
表格标题(和表格页脚)将被隐藏。
自定义呈现的标题槽将不会显示,而是使用字段的label
。
无法通过单击呈现的字段标签对表进行排序。 您将需要提供一个外部控件来选择要排序的字段和排序方向。 有关对控件信息进行排序的信息,请参见下面的Sorting 部分;
对于使用表单控件来控制排序的示例,请参见本页底部的 完整实例 。
在视觉上堆叠时,top-row
和bottom-row
排插槽将被隐藏
表格标题(如果提供)在视觉上堆叠时将始终显示在表格的顶部。
在始终堆叠的表中,表的页眉和页脚以及固定的顶部和底部行插槽 将不会被渲染。
为了支持堆叠表格,需要BootstrapVue的自定义CSS。
表格标题
通过属性caption
或命名的slot table-caption
(插槽优先于prop),向表中添加可选标题。 默认的Bootstrap v4样式将标题放在表格的底部:
This is a table caption.
First Name
Last Name
Age
Dickerson
Macdonald
40
Larsen
Shaw
21
Geneva
Wilson
89
<template >
<div >
<b-table :items ="items" :fields ="fields" >
<template v-slot:table-caption > This is a table caption.</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : ['first_name' , 'last_name' , 'age' ],
items : [
{ age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ age : 89 , first_name : 'Geneva' , last_name : 'Wilson' }
]
}
}
}
</script >
您可以通过将caption-top
属性设置为true
来将标题放置在表格的顶部:
This is a table caption at the top.
First Name
Last Name
Age
Dickerson
Macdonald
40
Larsen
Shaw
21
Geneva
Wilson
89
<template >
<div >
<b-table :items ="items" :fields ="fields" caption-top >
<template v-slot:table-caption > This is a table caption at the top.</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : ['first_name' , 'last_name' , 'age' ],
items : [
{ age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ age : 89 , first_name : 'Geneva' , last_name : 'Wilson' }
]
}
}
}
</script >
您还可以使用自定义 CSS 来控制字幕的位置。
表格 colgroup
table-colgroup
为表列的可选分组和样式指定
<colgroup>
和
<col>
元素。
请注意,通过<col>
元素可用的样式是有限的。
有关<colgroup>
的详细信息和用法,
请参考MDN
插槽table-colgroup
可以选择范围,接收具有以下属性的对象:
提供时, table-colgroup
插槽的内容将放置在
元素内。
无需提供您自己的外部<colgroup>
元素。
如果出于辅助技术的原因应将一系列表列分组(为了传达逻辑列关联,请使用<col span="#">
元素(用#
替换为分组列的数量)来对一系列列进行分组。
提示:
在某些情况下,当尝试通过
元素上的 style
或
class
设置列宽时,您可能会发现将表置于固定
标题宽度(表固定布局模式)模式与responsive
(水平滚动)模式结合使用会有所帮助,尽管您将需要通过样式或类为每个列的相应<col>
元素设置显式宽度或最小宽度。例如:
<b-table fixed responsive :items ="items" :fields ="fields" ... >
<template v-slot:table-colgroup ="scope" >
<col
v-for ="field in scope.fields"
:key ="field.key"
:style ="{ width: field.key === 'foo' ? '120px' : '180px' }"
>
</template >
</b-table >
表格忙碌状态
<b-table>
提供了一个忙碌属性,它将把table标记为busy
,您可以在更新商品之前将其设置为true
,然后在拥有商品后将其设置为false
。当处于繁忙状态时,该表将具有属性aria-busy="true"
。
在繁忙状态期间,将使用以下自定义CSS将表呈现为“静音”外观(opacity: 0.6
):
table .b-table [aria-busy='true' ] {
opacity : 0.6 ;
}
您可以使用自己的CSS覆盖此样式。
您可以选择提供一个table-busy
插槽,以在表的忙状态为真时显示自定义加载消息或微调框。 该插槽将放置在
b-table-busy-slot
类的
<tr>
元素中,该元素具有一个单个<td>
,且colspan
设置为字段数。
表格table-busy
用法:
Toggle Busy State
First Name
Last Name
Age
Dickerson
MacDonald
40
Larsen
Shaw
21
Geneva
Wilson
89
Jami
Carney
38
<template >
<div >
<b-button @click ="toggleBusy" > Toggle Busy State</b-button >
<b-table :items ="items" :busy ="isBusy" class ="mt-3" outlined >
<template v-slot:table-busy >
<div class ="text-center text-danger my-2" >
<b-spinner class ="align-middle" > </b-spinner >
<strong > Loading...</strong >
</div >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
isBusy : false ,
items : [
{ first_name : 'Dickerson' , last_name : 'MacDonald' , age : 40 },
{ first_name : 'Larsen' , last_name : 'Shaw' , age : 21 },
{ first_name : 'Geneva' , last_name : 'Wilson' , age : 89 },
{ first_name : 'Jami' , last_name : 'Carney' , age : 38 }
]
}
},
methods : {
toggleBusy() {
this .isBusy = !this .isBusy
}
}
}
</script >
另请参阅下面的使用项目提供程序功能 以获取有关busy
状态的其他信息。
注意:
当表处于busy
状态时,将不 发出所有与单击相关的事件和悬停事件,以及排序已更改的事件。
<b-table-lite>
组件中没有忙碌的样式和插槽。
自定义数据渲染
可以使用scoped slots 或格式化程序回调函数或两者结合来为行中的每个数据字段自定义呈现。
范围字段插槽
范围字段槽使您可以更好地控制记录数据的显示方式。 您可以使用作用域内的插槽为特定字段提供自定义呈现。 如果要添加记录中不存在的额外字段,
只需将其添加到fields
数组,然后在作用域插槽中引用该字段。 范围字段槽使用以下命名语法:'cell(' + field key + ')'
。
您可以使用默认的后备作用域作用域插槽'cell()'
来格式化没有提供显式作用域插槽的所有单元格。
示例: 具有作用域插槽的自定义数据呈现
Index
Full Name
Age
Sex
First name and age
1
DOE , John
42
Male
John is 42 years old
2
DOE , Jane
36
Female
Jane is 36 years old
3
KINCADE , Rubin
73
Male
Rubin is 73 years old
4
PARTRIDGE , Shirley
62
Female
Shirley is 62 years old
<template >
<div >
<b-table small :fields ="fields" :items ="items" responsive ="sm" >
<template v-slot:cell (index )="data" >
{{ data.index + 1 }}
</template >
<template v-slot:cell (name )="data" >
<b class ="text-info" > {{ data.value.last.toUpperCase() }}</b > , <b > {{ data.value.first }}</b >
</template >
<template v-slot:cell (nameage )="data" >
{{ data.item.name.first }} is {{ data.item.age }} years old
</template >
<template v-slot:cell ()="data" >
<i > {{ data.value }}</i >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : [
'index' ,
{ key : 'name' , label : 'Full Name' },
'age' ,
'sex' ,
{ key : 'nameage' , label : 'First name and age' }
],
items : [
{ name : { first : 'John' , last : 'Doe' }, sex : 'Male' , age : 42 },
{ name : { first : 'Jane' , last : 'Doe' }, sex : 'Female' , age : 36 },
{ name : { first : 'Rubin' , last : 'Kincade' }, sex : 'Male' , age : 73 },
{ name : { first : 'Shirley' , last : 'Partridge' }, sex : 'Female' , age : 62 }
]
}
}
}
</script >
插槽的范围变量(上述示例中的data
)将具有以下属性:
属性
类型
描述
index
Number
相对于显示行的行号(从零开始索引)
item
Object
该行的全部原始记录数据(即items[index]
)(在应用任何格式化程序之前)
value
Any
记录中此键的值(如果为虚拟列,则为null
或
undefined
),或字段的格式化程序
功能 的输出
unformatted
Any
在传递给字段的格式化程序
功能 之前,
该键在项目记录中的原始值(如果为虚拟列,则为null
或
undefined
)
field
Object
字段的规范化字段定义对象
detailsShowing
Boolean
如果该行的row-details
范围的广告位可见,
则为true
。有关其他信息,请参见下面的 row-details
scoped slot is visible. See section 行详情信息支持 部分。
toggleDetails
Function
可以调用此选项来切换行的 row-details
范围的作用域插槽。 有关其他信息,请参见下面的行详情信息支持 部分。
rowSelected
Boolean
如果已选择该行,则为true
。有关其他信息,请参见行选择支持 部分。
selectRow
Function
调用时,选择当前行。 有关其他信息,请参见行选择支持 部分。
unselectRow
Function
调用时,取消选择当前行。 有关其他信息,请参见行选择支持 部分。
注意:
index
并非总是实际行的索引号,因为它是在对原始表数据应用了过滤,排序和分页之后计算的。 index
值将参考显示的行号 。
该数字将与可选v-model
绑定 变量的索引对齐。
在使用新的Vue 2.6 v-slot
语法时,请注意,插槽名称不能
包含空格,并且在使用浏览器内DOM模板时,插槽名称将始终小写。 为了解决这个问题,您可以使用Vue的dynamic slot names 。
显示原始HTML
默认情况下,b-table
会在item数据和格式化程序功能的结果中转义HTML标记,如果需要在b-table
中显示原始HTML代码,则应在作用域内的字段插槽中的元素上使用v-html
指令。
Text
Html
This is <i>escaped</i> content
This is raw HTML content
<template >
<div >
<b-table :items ="items" >
<template v-slot:cell (html )="data" >
<span v-html ="data.value" > </span >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
items: [
{
text: 'This is <i > escaped</i > content',
html: 'This is <i > raw <strong > HTML</strong > </i > <span style ="color:red" > content</span > '
}
]
}
}
}
</script >
警告:
请谨慎使用v-html
方法显示用户提供的内容,因为这可能会使您的应用程序容易受到 XSS 攻击
(可选)您可以使用格式化程序回调函数来自定义字段输出。 为此,使用了字段的formatter
属性。
此属性的值可以是String或函数引用。 如果为String值,则必须在父组件的方法中定义函数。 在将格式化程序作为函数提供时,除非已绑定到此上下文,否则必须在全局范围(在Vue的窗口或在Vue上作为全局mixin或作为匿名函数)进行声明。
回调函数接受三个参数-value
, key
,和
item
,并且应以字符串形式返回格式化的值(不支持HTML字符串)
示例: 使用格式化程序回调函数自定义数据呈现
<template >
<div >
<b-table :fields ="fields" :items ="items" >
<template v-slot:cell (name )="data" >
<a :href ="`#${data.value.replace(/[^a-z]+/i,'-').toLowerCase()}`" > {{ data.value }}</a >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : [
{
key : 'name' ,
label : 'Full Name' ,
formatter : 'fullName'
},
'age' ,
{
key : 'sex' ,
formatter : value => {
return value.charAt(0 ).toUpperCase()
}
},
{
key : 'birthYear' ,
label : 'Calculated Birth Year' ,
formatter : (value, key, item ) => {
return new Date ().getFullYear() - item.age
}
}
],
items : [
{ name : { first : 'John' , last : 'Doe' }, sex : 'Male' , age : 42 },
{ name : { first : 'Jane' , last : 'Doe' }, sex : 'Female' , age : 36 },
{ name : { first : 'Rubin' , last : 'Kincade' }, sex : 'male' , age : 73 },
{ name : { first : 'Shirley' , last : 'Partridge' }, sex : 'female' , age : 62 }
]
}
},
methods : {
fullName(value) {
return `${value.first} ${value.last} `
}
}
}
</script >
还可以为表格thead
和
tfoot
元素提供自定义呈现。 请注意,默认情况下,除非将
foot-clone
设置为true
,否则不会呈现表页脚。
页眉和页脚单元格的作用域插槽分别使用特殊的命名约定'head(<fieldkey>)'
和
'foot(<fieldkey>)'
。 如果未提供字段的
'foot(...)'
插槽,但提供了
'head(...)'
插槽,则页脚将使用
'head(...)'
插槽内容。
您可以使用默认的后备作用域作用域插槽'head()'
和'foot()'
来格式化没有提供显式作用域插槽的任何页眉或页脚单元格。
<template >
<div >
<b-table :fields ="fields" :items ="items" foot-clone >
<template v-slot:cell (name )="data" >
{{ data.value.first }} {{ data.value.last }}
</template >
<template v-slot:head (name )="data" >
<span class ="text-info" > {{ data.label.toUpperCase() }}</span >
</template >
<template v-slot:foot (name )="data" >
<span class ="text-danger" > {{ data.label }}</span >
</template >
<template v-slot:foot ()="data" >
<i > {{ data.label }}</i >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : [
{ key : 'name' , label : 'Full Name' },
'age' ,
'sex'
],
items : [
{ name : { first : 'John' , last : 'Doe' }, sex : 'Male' , age : 42 },
{ name : { first : 'Jane' , last : 'Doe' }, sex : 'Female' , age : 36 },
{ name : { first : 'Rubin' , last : 'Kincade' }, sex : 'Male' , age : 73 },
{ name : { first : 'Shirley' , last : 'Partridge' }, sex : 'Female' , age : 62 }
]
}
}
}
</script >
插槽可以选择范围(上例中的数据
),并具有以下属性:
属性
类型
描述
column
String
字段的关键值
field
Object
字段的对象(来自字段属性)
label
String
字段标签值(也可以作为data.field.label
使用)
selectAllRows
Method
选择所有行(如果表处于可选
模式,则适用
clearSelected
Method
取消选择所有行(如果表处于可选
模式,则适用
在head(...)
和
foot(...)
插槽内放置输入,按钮,选择或链接时,请注意,单击输入,选择,文本区域时,将不会发出单击事件(除非已禁用它们) 。 单击作用域内的插槽中的链接或按钮时,即使单击禁用,也不会发出用鼠标点击的标题
笔记:
在使用新的Vue 2.6 v-slot
语法时,
请注意,插槽名称 >包含空格,并且在使用浏览器内DOM模板时,插槽名称将始终小写。 为了解决这个问题,您可以使用Vue的dynamic slot names 传递插槽名称
如果您想在标题中添加其他行,可以通过thead-top
插槽进行。
该插槽插入标头单元格行之前,并且不会被<tr>..</tr>
标记自动封装。
建议使用BootstrapVue表格帮助器 组件,而不要使用本机浏览器表子元素。
Name and ID
Type 1
Type 2
Type 3
Name
ID
Type 1
Type 2A
Type 2B
Type 2C
Type 3
Stephen Hawking
1
false
true
false
false
false
Johnny Appleseed
2
false
true
true
false
false
George Washington
3
false
false
false
false
true
Albert Einstein
4
true
false
false
true
false
Isaac Newton
5
true
true
false
true
false
<template >
<div >
<b-table
:items ="items"
:fields ="fields"
responsive ="sm"
>
<template v-slot:thead-top ="data" >
<b-tr >
<b-th colspan ="2" > <span class ="sr-only" > Name and ID</span > </b-th >
<b-th variant ="secondary" > Type 1</b-th >
<b-th variant ="primary" colspan ="3" > Type 2</b-th >
<b-th variant ="danger" > Type 3</b-th >
</b-tr >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
items : [
{ name : 'Stephen Hawking' , id : 1 , type1 : false , type2a : true , type2b : false , type2c : false , type3 : false },
{ name : 'Johnny Appleseed' , id : 2 , type1 : false , type2a : true , type2b : true , type2c : false , type3 : false },
{ name : 'George Washington' , id : 3 , type1 : false , type2a : false , type2b : false , type2c : false , type3 : true },
{ name : 'Albert Einstein' , id : 4 , type1 : true , type2a : false , type2b : false , type2c : true , type3 : false },
{ name : 'Isaac Newton' , id : 5 , type1 : true , type2a : true , type2b : false , type2c : true , type3 : false },
],
fields : [
'name' ,
{ key : 'id' , label : 'ID' },
{ key : 'type1' , label : 'Type 1' },
{ key : 'type2a' , label : 'Type 2A' },
{ key : 'type2b' , label : 'Type 2B' },
{ key : 'type2c' , label : 'Type 2C' },
{ key : 'type3' , label : 'Type 3' }
]
}
}
}
</script >
插槽thead-top
可以选择范围,接收具有以下属性的对象:
属性
类型
描述
columns
Number
呈现表中的列数
fields
Array
字段定义对象数组(标准化为对象数组格式)
selectAllRows
Method
选择所有行(如果表处于selectable
模式,则适用
clearSelected
Method
取消选择所有行(如果表处于selectable
模式,则适用
如果需要对<tfoot>
的内容进行更大的布局控制,则可以使用可选范围的插槽
custom-foot
提供自己的行和单元格。 使用BootstrapVue的表助手子组件
<b-tr>
,
<b-th>
,和
<b-td>
生成自定义页脚布局。
插槽custom-foot
可以选择范围,接收具有以下属性的对象:
属性
类型
描述
columns
Number
呈现表中的列数
fields
Array
字段定义对象数组(标准化为对象数组格式)
items
Array
当前显示的项记录的数组-过滤,排序和分页后
笔记:
如果设置了custom-foot
属性,则不会 渲染foot-clone
。
单击自定义英尺单元时,不会发出单击事件。
当表格处于视觉堆叠模式时,自定义页脚将不会显示。
通过插槽自定义空白和EmptyFiltered渲染
除了使用empty-text
,
empty-filtered-text
,
empty-html
,和
empty-filtered-html
外,还可以为没有数据的表提供自定义呈现,而表中没有要使用命名槽显示的数据。
为了显示这些插槽,必须设置show-empty
属性,并且项必须为falsy或长度为0的数组。
<div >
<b-table :fields ="fields" :items ="items" show-empty >
<template v-slot:empty ="scope" >
<h4 > {{ scope.emptyText }}</h4 >
</template >
<template v-slot:emptyfiltered ="scope" >
<h4 > {{ scope.emptyFilteredText }}</h4 >
</template >
</b-table >
</div >
插槽可以选择范围。 插槽的范围(上例中的作用域)将具有以下属性:
属性
类型
描述
emptyHtml
String
empty-html
属性
emptyText
String
empty-text
属性
emptyFilteredHtml
String
empty-filtered-html
属性
emptyFilteredText
String
empty-filtered-text
属性
fields
Array
fields
属性
items
Array
items
属性,Exposed here to check null vs []
高级功能
使用sticky-header
属性启用垂直滚动表,并在表主体滚动时保持标题不变(粘滞)。
将prop设置为true
(或没有显式值)将生成一个最大高度为300px
的表。
要指定300px
以外的最大高度,请将sticky-header
属性设置为有效的CSS高度(包括单位),即sticky-header="200px"
。
如果表大于可用的水平空间,则启用粘性页眉的表也将自动始终保持水平响应,而不管responsive
属性设置如何。
<template >
<div >
<b-table sticky-header :items ="items" head-variant ="light" > </b-table >
</div >
</template >
<script >
export default {
data() {
return {
items : [
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' },
{ heading1 : 'table cell' , heading2 : 'table cell' , heading3 : 'table cell' }
]
}
}
}
</script >
粘性标头说明:
如果桌子上有stacked
的属性,那么sticky-header
属性将不起作用。
粘性标头表包装在垂直滚动的<div>
中,并设置了最大高度。
需要BootstrapVue的自定义CSS才能支持sticky-header
。
Bootstrap v4使用CSS样式border-collapse: collapsed
:
在表格元素上折叠。 这样可以防止粘性标头上的边框“粘在”标头上,因此,当正文滚动时,边框也会滚动。 要解决此问题,请在表格上设置属性no-border-collapse
(注意,使用带边框等功能时,这可能会导致边框宽度加倍)。
粘性标头功能使用CSS样式位置:position: sticky
。
Internet Explorer不支持位置:position: sticky
,因此对于IE 11,表标题将与表主体一起滚动。
粘性列
可以将列设置为粘性列,当表格具有水平滚动条时,列会停留在表格的左侧。 要将列设为stickyColumn
,
请在字段的标题定义 中设置stickyColumn
属性。
粘性列仅在表格具有sticky-header
属性设置和/或已设置响应
属性时才起作用。
示例:粘性列和标题
<template >
<div >
<div class ="mb-2" >
<b-form-checkbox v-model ="stickyHeader" inline > Sticky header</b-form-checkbox >
<b-form-checkbox v-model ="noCollapse" inline > No border collapse</b-form-checkbox >
</div >
<b-table
:sticky-header ="stickyHeader"
:no-border-collapse ="noCollapse"
responsive
:items ="items"
:fields ="fields"
>
<template v-slot:head (id )="scope" >
<div class ="text-nowrap" > Row ID</div >
</template >
<template v-slot:head ()="scope" >
<div class ="text-nowrap" >
Heading {{ scope.label }}
</div >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
stickyHeader : true ,
noCollapse : false ,
fields : [
{ key : 'id' , stickyColumn : true , isRowHeader : true , variant : 'primary' },
'a' ,
'b' ,
{ key : 'c' , stickyColumn : true , variant : 'info' },
'd' ,
'e' ,
'f' ,
'g' ,
'h' ,
'i' ,
'j' ,
'k' ,
'l'
],
items : [
{ id : 1 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 2 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 3 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 4 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 5 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 6 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 7 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 8 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 9 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 },
{ id : 10 , a : 0 , b : 1 , c : 2 , d : 3 , e : 4 , f : 5 , g : 6 , h : 7 , i : 8 , j : 9 , k : 10 , l : 11 }
]
}
}
}
</script >
粘性列注释:
如果表格具有堆积
的属性集,则粘性列无效。
粘性列表需要sticky-header
和/或
responsive
模式,并包装在可水平滚动的<div>
中。
当您将多个列设置为stickyColumn
时,这些列将在视觉上相互堆叠,并且最左边的粘性列可能会从下一个粘性列下方“窥视”。 要解决此问题,请确保后面的stickyColumns与以前的sticky列具有相同的宽度或宽度。
Bootstrap v4使用CSS样式border-collapse: collapsed
在表格元素上折叠。
这样可以防止粘滞列上的任何边界“粘连”到列上,因此,当正文滚动时,这些边界也将滚动。 要解决此问题,请在表格上设置属性
no-border-collapse
(注意,使用带边框等功能时,这可能会导致边框宽度加倍)。
为了支持粘性列,需要BootstrapVue的自定义CSS。
粘性列功能使用CSS样式position: sticky
以定位列单元格。
Internet Explorer不支持position: sticky
,因此对于IE 11,粘性列将随表格主体滚动。
行详细信息支持
如果您可以选择显示其他记录信息(例如,在字段定义数组中未指定的列),则可以将作用域内的row-details
与
特殊项目记录布尔属性_showDetails
结合使用。
如果记录的_showDetails
属性设置为true
,
并且存在row-details
的槽,则将在该项目的正下方显示新行,并显示row-details
的槽的内容。
在作用域字段插槽中,您可以通过调用传递到该字段作用域插槽变量的toggleDetails
函数,
来切换行的row-details
作用域插槽的可见性。 您可以使用作用域字段插槽变量detailsShowing
确定row-details
插槽的可见性。
注意:
如果直接在项目数据上操作_showDetails
属性
(即不通过toggleDetails
函数引用),
则_showDetails
必须正确存在于项目数据中,以便正确地检测其值的更改。 阅读有关Vue的反应性限制 的更多信息。
可用的 行详细信息
范围的变量属性:
属性
类型
描述
item
Object
整行记录数据对象
index
Number
当前可见行号
fields
Array
标准化字段定义数组(以对象数组格式)
toggleDetails
Function
切换行的详细信息栏可见性的功能
rowSelected
Boolean
如果已选择该行,则为true
。 有关其他信息,
请参见Row select support 部分。
selectRow
Function
调用时,选择当前行。 有关其他信息,请参见Row select support 部分。
unselectRow
Function
调用时,取消选择当前行。 有关其他信息,请参见Row select support 部分。
注意:与行选择相关的范围属性仅在<b-table>
中可用。
在下面的示例中,我们显示了两种切换细节可见性的方法:一种通过按钮,另一种通过复选框。 我们还有第三行详细信息,默认情况下最初会显示详细信息。
<template >
<div >
<b-table :items ="items" :fields ="fields" striped responsive ="sm" >
<template v-slot:cell (show_details )="row" >
<b-button size ="sm" @click ="row.toggleDetails" class ="mr-2" >
{{ row.detailsShowing ? 'Hide' : 'Show'}} Details
</b-button >
<b-form-checkbox v-model ="row.detailsShowing" @change ="row.toggleDetails" >
Details via check
</b-form-checkbox >
</template >
<template v-slot:row-details ="row" >
<b-card >
<b-row class ="mb-2" >
<b-col sm ="3" class ="text-sm-right" > <b > Age:</b > </b-col >
<b-col > {{ row.item.age }}</b-col >
</b-row >
<b-row class ="mb-2" >
<b-col sm ="3" class ="text-sm-right" > <b > Is Active:</b > </b-col >
<b-col > {{ row.item.isActive }}</b-col >
</b-row >
<b-button size ="sm" @click ="row.toggleDetails" > Hide Details</b-button >
</b-card >
</template >
</b-table >
</div >
</template >
<script >
export default {
data() {
return {
fields : ['first_name' , 'last_name' , 'show_details' ],
items : [
{ isActive : true , age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ isActive : false , age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{
isActive : false ,
age : 89 ,
first_name : 'Geneva' ,
last_name : 'Wilson' ,
_showDetails : true
},
{ isActive : true , age : 38 , first_name : 'Jami' , last_name : 'Carney' }
]
}
}
}
</script >
行选择支持
您可以通过使用<b-table>
属性来selectable
行。
用户可以通过设置select-mode
属性轻松地更改选择模式。
'multi'
: 每次单击都会选择/取消选择该行(默认模式)
'single'
: 一次只能选择一行
'range'
: 选择任何单击的行,取消选择任何其他行。 SHIFT + 单击选择行范围,然后,
和CTRL (或 CMD ) +单击将切换选定的行。
当一个表格是selectable
的并且用户单击一行时,<b-table>
将发出row-selected
的事件,并传递单个参数,该参数是所选项目的完整列表。将此参数视为只读。
还可以通过<b-table>
实例上的以下公开方法以编程方式选择和取消选择行(即通过this.$refs
对表实例的引用):
方法
描述
selectRow(index)
选择具有给定索引
号的行。
unselectRow(index)
取消选择具有给定索引
号的行。
selectAllRows()
选择表中的所有行,但在单
模式下除外,在这种情况下,仅选择第一行。
clearSelected()
取消选择所有行。
isRowSelected(index)
如果选择了具有给定 索引
的行,则返回true
;
否则返回false
。
程序行选择注意事项:
index
是在应用了过滤,排序和分页之后,表的可见行 从零开始的索引。
在单
模式下,selectRow(index)
将取消选择任何先前选择的行。
尝试在不存在的行上选择selectRow(index)
或unselectRow(index)
将被忽略。
该表必须可选中
所有这些方法才能生效。
您可以通过设置no-select-on-click
属性来通过点击事件禁用行选择。 然后只能通过编程选择行。
行选择注释:
对表进行Sorting , filtering , 或 paginating
将清除活动的选择 。 如果需要,将以空数组([]
)发出行选择
的事件。
当表处于 可选
模式时,
出于可访问 的原因,所有数据项<tr>
元素都将位于文档选项卡序列中(tabindex="0"
),
并且将 aria-selected
属性设置为
'true'
或'false'
取决于行的选定状态。
当一个表是可选
的时,
该表将把aria-multiselect
属性设置为'false'
(对于'单'
模式)和'true'
(对于多
模式或范围
模式)。
当<b-table>
是可选的时,它将在<table>
元素上
具有b-table-selectable
和以下三个类之一(取决于所使用的模式):
b-table-select-single
b-table-select-multi
b-table-select-range
当选择至少一行时,b-table-selecting
类
将在<table>
元素上处于活动状态。
选定行的行将对 <tr>
元素应用一类b-table-row-selected
。
使用属性selected-variant
将Bootstrap主题颜色应用于选定的行。
注意,由于表变量在Bootstrap的CSS中定义的顺序,因此任何行变量都可能优先于选择变量
。 如果您将使用其他方式来表示已选择行(例如,下例中的作用域字段槽),则可以将selected-variant
设置为空字符串。
selected-variant
可以是任何标准(或自定义)引导程序基本颜色变体 ,
也可以是优先于任何特定行或单元格变量的特殊表 active
变量 (默认值)。
出于可访问性的原因(特别是对于色盲用户或有色差问题的用户),强烈建议始终提供其他视觉方式来传达已选择行的信息,例如下面示例中显示的虚拟列。
Selected
Is Active
Age
First Name
Last Name
Not selected
true
40
Dickerson
Macdonald
Not selected
false
21
Larsen
Shaw
Not selected
false
89
Geneva
Wilson
Not selected
true
38
Jami
Carney
Select all
Clear selected
Select 3rd row
Unselect 3rd row
Selected Rows:
[]
<template >
<div >
<b-form-group label ="Selection mode:" label-cols-md ="4" >
<b-form-select v-model ="selectMode" :options ="modes" class ="mb-3" > </b-form-select >
</b-form-group >
<b-table
ref ="selectableTable"
selectable
:select-mode ="selectMode"
:items ="items"
:fields ="fields"
@row-selected ="onRowSelected"
responsive ="sm"
>
<template v-slot:cell (selected )="{ rowSelected }" >
<template v-if ="rowSelected" >
<span aria-hidden ="true" > ✓ </span >
<span class ="sr-only" > Selected</span >
</template >
<template v-else >
<span aria-hidden ="true" > </span >
<span class ="sr-only" > Not selected</span >
</template >
</template >
</b-table >
<p >
<b-button size ="sm" @click ="selectAllRows" > Select all</b-button >
<b-button size ="sm" @click ="clearSelected" > Clear selected</b-button >
<b-button size ="sm" @click ="selectThirdRow" > Select 3rd row</b-button >
<b-button size ="sm" @click ="unselectThirdRow" > Unselect 3rd row</b-button >
</p >
<p >
Selected Rows:<br >
{{ selected }}
</p >
</div >
</template >
<script >
export default {
data() {
return {
modes : ['multi' , 'single' , 'range' ],
fields : ['selected' , 'isActive' , 'age' , 'first_name' , 'last_name' ],
items : [
{ isActive : true , age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ isActive : false , age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ isActive : false , age : 89 , first_name : 'Geneva' , last_name : 'Wilson' },
{ isActive : true , age : 38 , first_name : 'Jami' , last_name : 'Carney' }
],
selectMode : 'multi' ,
selected : []
}
},
methods : {
onRowSelected(items) {
this .selected = items
},
selectAllRows() {
this .$refs.selectableTable.selectAllRows()
},
clearSelected() {
this .$refs.selectableTable.clearSelected()
},
selectThirdRow() {
this .$refs.selectableTable.selectRow(2 )
},
unselectThirdRow() {
this .$refs.selectableTable.unselectRow(2 )
}
}
}
</script >
表格内容过渡支持
可以通过内部使用Vue的<tbody>
组件在
元素上支持Vue<transition-group>
。 提供了三个支持过渡的道具(所有三个道具默认为undefined):
属性
类型
描述
tbody-transition-props
Object
过渡组属性的对象
tbody-transition-handlers
Object
过渡组事件处理程序的对象
primary-key
String
字符串,指定要用作唯一行键的字段(必填)
要启用转换,您需要指定tbody-transition-props
和/或 tbody-transition-handlers
,
并且必须通过主键
属性指定要用作唯一键的字段键。
您的数据必须具有一列(通过将主键
属性设置为字段名称来指定),
该列每行必须具有唯一值,以使转换正常工作。 主键字段的值可以是唯一的字符串或数字。 指定的字段不需要出现在呈现的表输出中,但是必须存在于item数据的每一行中。
您还必须提供CSS来处理项目中的过渡(如果使用CSS过渡)。
有关Vue的列表呈现过渡的更多信息,请参见 Vue JS 官方文档 。
在下面的示例中,我们使用了以下自定义CSS:
table #table-transition-example .flip-list-move {
transition : transform 1s ;
}
A (Click to sort Ascending)
B (Click to sort Ascending)
C (Click to sort Ascending)
2
Two
Moose
1
Three
Dog
3
Four
Cat
4
One
Mouse
<template >
<div >
<b-table
id ="table-transition-example"
:items ="items"
:fields ="fields"
striped
small
primary-key ="a"
:tbody-transition-props ="transProps"
> </b-table >
</div >
</template >
<script >
export default {
data() {
return {
transProps : {
name : 'flip-list'
},
items : [
{ a : 2 , b : 'Two' , c : 'Moose' },
{ a : 1 , b : 'Three' , c : 'Dog' },
{ a : 3 , b : 'Four' , c : 'Cat' },
{ a : 4 , b : 'One' , c : 'Mouse' }
],
fields : [
{ key : 'a' , sortable : true },
{ key : 'b' , sortable : true },
{ key : 'c' , sortable : true }
]
}
}
}
</script >
v-model
捆绑
如果将变量绑定到v-model
属性,
则此变量的内容将是当前显示的项目记录(从零开始的索引,最大也页面大小
-1)。 通常应将此变量(值
属性)视为只读。
v-model
中的记录是项的过滤/分页浅表副本,
因此,对v-model
中记录属性的任何更改都将反映在原始项数组中(将项设置为提供程序功能时除外)。
从v-model
数组中删除记录不会从原始项目数组中删除记录,也不会从显示的行中删除记录。
注意:
请勿将任何值直接绑定到值
属性。使用v-model
绑定。
排序
如上文 字段 部分所述,
您可以使列在<b-table>
中可排序。
单击可排序的列标题将按升序对列进行排序(从小到大),而再次单击将将排序方向切换为降序(从大到大)。 单击不可排序的列将清除排序(可以使用属性no-sort-reset
禁用此功能)。
您可以控制对哪一列进行预排序以及排序顺序(升序或降序)。 要预先指定要排序的列,请将sort-by
属性设置为字段的键。
通过将sort-desc
设置为true
(降序)
或false
(默认值升序)来设置排序方向。
上升 :
项目按从低到高的顺序(即A
到Z
)排序,并在第一行中以最低的值显示,在随后的行中以更高的值显示。
降序 :
项目按从高到低的顺序(即A
到Z
)排序,并在第一行中以最高值显示,在随后的行中以较低的值显示。
通过添加.sync
修饰符,
可以将props sort-by
和sort-desc
转换为双向(可同步)props。
然后,将根据当前的排序标准相应地更新您的绑定变量。 有关.sync属性修饰符的详细信息,请参见Vue 文档 。
将排序依据
设置为未在字段中定义为可排序
的列将导致表未排序。
设置属性foot-clone
后,即使您具有自定义格式的页脚字段标题,
页脚标题也将允许通过单击进行排序。 若要禁用排序图标和通过单击页脚中的标题单击来进行排序,请将无页脚排序
属性设置为true。
Last Name (Click to sort Ascending)
First Name (Click to sort Ascending)
Age (Click to sort Descending)
Is Active (Click to clear sorting)
Shaw
Larsen
21
false
Carney
Jami
38
true
Macdonald
Dickerson
40
true
Wilson
Geneva
89
false
Sorting By: age , Sort Direction: Ascending
<template >
<div >
<b-table
:items ="items"
:fields ="fields"
:sort-by.sync ="sortBy"
:sort-desc.sync ="sortDesc"
responsive ="sm"
> </b-table >
<div >
Sorting By: <b > {{ sortBy }}</b > , Sort Direction:
<b > {{ sortDesc ? 'Descending' : 'Ascending' }}</b >
</div >
</div >
</template >
<script >
export default {
data() {
return {
sortBy : 'age' ,
sortDesc : false ,
fields : [
{ key : 'last_name' , sortable : true },
{ key : 'first_name' , sortable : true },
{ key : 'age' , sortable : true },
{ key : 'isActive' , sortable : false }
],
items : [
{ isActive : true , age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ isActive : false , age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ isActive : false , age : 89 , first_name : 'Geneva' , last_name : 'Wilson' },
{ isActive : true , age : 38 , first_name : 'Jami' , last_name : 'Carney' }
]
}
}
}
</script >
排序图标对齐
默认情况下,排序图标在标题单元格中显示为右对齐。 您可以通过在<b-table>
上设置属性sort-icon-left
来更改图标以使其左对齐。
Last Name (Click to sort Ascending)
First Name (Click to sort Ascending)
Age (Click to sort Descending)
Is Active (Click to clear sorting)
Shaw
Larsen
21
false
Carney
Jami
38
true
Macdonald
Dickerson
40
true
Wilson
Geneva
89
false
Sorting By: age , Sort Direction: Ascending
<template >
<div >
<b-table
:items ="items"
:fields ="fields"
:sort-by.sync ="sortBy"
:sort-desc.sync ="sortDesc"
sort-icon-left
responsive ="sm"
> </b-table >
<div >
Sorting By: <b > {{ sortBy }}</b > , Sort Direction:
<b > {{ sortDesc ? 'Descending' : 'Ascending' }}</b >
</div >
</div >
</template >
<script >
export default {
data() {
return {
sortBy : 'age' ,
sortDesc : false ,
fields : [
{ key : 'last_name' , sortable : true },
{ key : 'first_name' , sortable : true },
{ key : 'age' , sortable : true },
{ key : 'isActive' , sortable : false }
],
items : [
{ isActive : true , age : 40 , first_name : 'Dickerson' , last_name : 'Macdonald' },
{ isActive : false , age : 21 , first_name : 'Larsen' , last_name : 'Shaw' },
{ isActive : false , age : 89 , first_name : 'Geneva' , last_name : 'Wilson' },
{ isActive : true , age : 38 , first_name : 'Jami' , last_name : 'Carney' }
]
}
}
}
</script >
自定义排序图标
排序图标是通过使用SVG背景图像生成的。可以通过更新BootstrapVue的SASS/SCSS变量并重新编译SCSS源代码来更改图标。有关自定义Bootstrap和BootstrapVue生成的CSS的详细信息,
请参阅主题 部分。
排序比较常规
内部内置的默认sort-compare
函数根据基础记录对象中的数据对指定的字段 键
进行排序(如果字段具有格式化程序功能,并且该字段的sortByFormatted
属性设置为true
,则按格式化值排序)。 如果字段值是一个对象,则首先对其进行字符串化,然后进行排序。
注意事项:
内置的sort-compare
例程无法基于字段数据的自定义呈现进行排序:作用域插槽仅用于显示,不会 影响基础数据。
如果字段属性sortByFormatted
设置为true
,则具有 格式化程序
功能
的字段 (虚拟字段或常规字段)可以通过格式化程序功能返回的值进行排序。(可选)您可以将格式器函数引用传递给sortByFormatted
,
以在排序之前对值进行格式化。 默认值为false,它将按原始字段值排序。 这仅适用于内置的sortByFormatted
例程。
默认情况下,内部排序例程将首先对null
,
undefined
或空字符串值(小于任何其他值)进行排序。
要排序以使null
,
undefined
或空字符串值最后出现(大于任何其他值),
请将sort-null-last
属性设置为true
。
要自定义排序比较处理,请参阅下面的自定义排序比较例程 部分。
内部排序和语言环境处理
内部sort-compare例程使用
String.prototype.localeCompare()
来比较字符串化的列值(如果要比较的值既不是Number
也不是Date
类型)。浏览器的本地localeCompare()
方法接受一个语言环境字符串(或语言环境字符串数组)和一个用于控制字符串排序方式的options
对象。
默认选项为{ numeric: true }
,并且语言环境未定义(使用浏览器的默认语言环境)。
您可以通过sort-compare-locale
属性更改语言环境,
以设置要进行排序的语言环境,也可以通过sort-compare-options
属性传递排序选项。
sort-compare-locale
属性默认为undefined
,
它使用浏览器(或Node.js运行时)的默认语言环境。属性sort-compare-locale
可以接受BCP 47 language tag
字符串或此类标签的数组。 有关语言环境的更多详细信息,请参阅MDN上的Locale identification and negotiation 。
sort-compare-options
属性接受包含以下任何属性的对象:
localeMatcher
:
要使用的语言环境匹配算法。 可能的值为'lookup'
和
'best fit'
。 默认值为'best fit'
。
有关此选项的信息,请参见 MDN Intl 页面 以获取详细信息。
sensitivity
: 字符串中的哪些差异应导致比较结果值非零。 可能的值为:
'base'
:
只有基本字母不同的字符串才能比较为不相等。 示例:a ≠ b
, a = á
,
a = A
。
'accent'
:
仅将基本字母或重音和其他音标不同的字符串视为不相等。示例:a ≠ b
,
a ≠ á
,
a = A
。
'case'
: 仅将基本字母或大小写不同的字符串比较为不相等。例子: a ≠ b
, a = á
, a ≠ A
.
'variant'
: (默认值) 基本字母,重音符号和其他变音符号或大小写不同的字符串比较不相等。 也可以考虑其他差异。 例子:a ≠ b
, a ≠ á
, a ≠ A
.
ignorePunctuation
:
标点符号是否应被忽略。 可能的值为true
和
false
。 默认值为false
。
numeric
:
是否应使用数字排序规则,例如'1' < '2' < '10'
。
可能的值为true
和
false
。 默认值为 false
。
请注意,不需要支持(浏览器,运行时)实现即可支持此属性,因此可能会忽略它。
caseFirst
:
大写还是小写都应该首先排序。 可能的值为'upper'
,
'lower'
,或
'false'
(使用语言环境的默认值)。默认值为'false'
。 不需要实现来支持此属性。
'usage'
: 始终
始终由<b-table>
设置为'sort'
。
例子 1:
如果要对德语单词进行排序,请设置sort-compare-locale="de"
(德语, ä
排序在 z
之前)
或瑞典语设置sort-compare-locale="sv"
(瑞典语,ä
排序在z
之后)
例子 2: 要比较数字字符串,并忽略大小写和重音符号:
<b-table :sort-compare-options ="{ numeric: true, sensitivity: 'base' }" ... >
注意事项:
自定义排序比较例程
您可以通过将函数引用传递给属性sort-compare
来提供自己的自定义排序比较例程。
传递了sort-compare
例程的七(7)个参数,其中最后4个是可选的:
前两个参数(a
和b
)是要比较的行的记录对象
第三个参数是排序的字段键
(sortBy
)
第四个参数(sortDesc
)是<b-table>
将显示记录的顺序(true
为降序,false
为升序)
第五个参数是对该字段格式化函数 的引用,
或者是该字段的filterByFormatted
值(如果它是函数引用)的引用。
如果未找到格式化程序,则该值将是不确定的。如果需要按格式排序,则需要调用此方法以获取格式化的字段值:
valA = formatter(a[key], key, a)
和
valB = formatter(b[key], key, b)
值。
如果字段的sortByFormatted
属性为true
或不是格式化程序函数的引用,或者找不到字段格式化程序的函数,则此字段未定义。
第六个参数是sort-compare-options
属性的值(默认为{ numeric: true }
)
第七个参数是sort-compare-locale
属性的值(默认为undefined
)
如果使用String.prototype.localeCompare()
方法比较字符串,则可以使用第六和第七个参数。
在大多数典型情况下,您只需要使用前三个参数。 第四个参数-排序方向-通常不应使用,因为b-table
将处理该方向,
并且通常仅在对null
和/或
undefined
值的排序方式进行特殊处理(即首先对null
/undefined
进行排序或 持续)。
例程应为a[key] < b[key]
返回-1
(或负值),
为a[key] === b[key]
返回0,或为a[key] > b[key]
返回1(或正值)。
您的自定义排序比较例程还可以返回null
或false
,
以回退到特定键的内置排序比较例程。 您可以使用此功能(即,通过返回null
)让您的自定义排序比较例程仅处理某些字段(key
),
例如虚拟(作用域插槽)列的特殊情况,并具有内部(内置)排序比较 处理所有其他领域。
默认的排序比较例程的工作原理与以下类似。 请注意,排序比较中不 使用第四个参数(排序方向):
function sortCompare (aRow, bRow, key, sortDesc, formatter, compareOptions, compareLocale ) {
const a = aRow[key]
const b = bRow[key]
if (
(typeof a === 'number' && typeof b === 'number' ) ||
(a instanceof Date && b instanceof Date )
) {
return a < b ? -1 : a > b ? 1 : 0
} else {
return toString(a).localeCompare(toString(b), compareLocale, compareOptions)
}
}
function toString (value ) {
if (value === null || typeof value === 'undefined' ) {
return ''
} else if (value instanceof Object ) {
return Object .keys(value)
.sort()
.map(key => toString(value[key]))
.join(' ' )
} else {
return String (value)
}
}
禁用本地排序
如果您想完全在应用中处理排序,则可以通过将属性no-local-sorting
设置为true来禁用<b-table>
中的本地排序,
同时仍然保持可排序标头功能(通过sort-changed
或
context-changed
的事件以及可同步的道具)。
您可以使用可同步属性sort-by.sync
和sort-desc.sync
来检测排序列和方向的变化。
同样,当单击可排序的列标题(或页脚)时,将通过包含<b-table>
上下文对象的单个参数发出
sort-changed
的事件。 有关排序已更改事件和上下文对象的详细信息,请参见下面的检测排序更改 部分。
当no-local-sorting
为true时,sort-compare
属性无效。
更改初始排序方向
通过使用排序方向
属性,控制单击可排序的列标题时应用升序和降序排序的顺序。
默认值'asc'
首先应用升序排序(当当前未对列进行排序时)。
要反转行为并首先按降序排序,请将其设置为'desc'
。
如果您不希望在单击另一个可排序的列标题时更改当前的排序方向
,
请将排序方向设置为'last'
。 这将保持先前排序列的排序方向。
对于单个列的初始排序方向(当列从未排序过渡到已排序时适用),请在字段中指定属性sortDirection
。
有关使用此功能的示例,请参见下面的完整事例 。
筛选
使用过滤时,默认情况下将过滤应用于原始项数组数据。 b-table
提供了几种有关如何过滤数据的选项。
当前无法通过作用域范围内的插槽 基于格式化结果进行过滤。
内置过滤
对该项目的行数据值进行字符串化(有关如何完成字符串化,请参见上面的排序部分),并且过滤器搜索该字符串化数据(不包括下划线'_'
)开头的任何特殊属性)。 默认情况下,字符串化还包括未显示在所提供列中的任何数据。
使用默认的内置过滤器
功能,
过滤器支持值可以是字符串或RegExp
对象(正则表达式不应设置/g
全局标志)。
如果字符串化的行包含提供的字符串值或与RegExp表达式匹配,则它将包含在显示的结果中。
将过滤器
属性设置为null
或为空字符串以清除当前过滤器。
内置过滤选项
有几个选项可用于控制对过滤器应用哪些数据。
filter-ignored-fields
属性接受一个顶级(行数据的直接属性)字段键的数组,在过滤时应将其忽略。
filter-included-fields
性接受过滤时应使用的顶级(行数据的直接属性)字段键的数组。
未包括在此数组中的所有其他字段键将被忽略。 要在特定列上进行过滤时,此功能非常方便。 如果指定的数组为空,则包括所有字段,但通过属性filter-included-fields
指定的字段除外。 如果在忽略过滤器的字段和包含过滤器的字段中都指定了字段关键字,则包含过滤器的字段优先。
通常,<b-table>
根据已字符串化的记录数据进行过滤。
如果该字段指定了格式化程序
功能,
则可以通过将字段定义属性
filterByFormatted
设置为true
来基于格式化程序的结果进行过滤。
如果该字段没有格式化程序功能,则忽略此选项。 您可以选择将格式器函数引用(仅用于过滤)传递给字段定义属性filterByFormatted
。
使用自定义过滤器 >功能或基于项目提供程序 的过滤时,props的filter-ignored-fields
和
filter-included-fields
字段以及字段定义属性 filterByFormatted
无效。
自定义过滤器
您还可以通过将属性 过滤器功能
设置为自定义过滤器测试功能的引用来使用自定义过滤器功能。过滤器函数将传递两个参数:
原始项目行记录数据对象,将此参数视为只读。
过滤器
性的内容(可以是字符串,RegExp,数组或对象)
如果记录符合您的条件,则该函数应返回true
;如果要过滤掉记录,
则该函数应返回false
。
为了对显示的数据进行适当的反应性更新,在不过滤时,应将过滤器
属性设置为
null
或空字符串(而不是空对象或数组)。当过滤器
属性为假值时,不会调用筛选器功能。
空过滤器文本
的显示取决于empty-filter-text
的真实性。
过滤事件
当应用本地过滤,并且结果的项目数量发生变化时,<b-table>
将发出带有两个参数的过滤
事件:
数组引用,它是通过过滤例程的项目的完整列表。将此参数视为只读。
通过过滤器测试的记录数(第一个参数的长度)
将属性过滤器
设置为null或空字符串将清除本地项目过滤。
取消过滤条件的更改
在v2.1.0中已弃用
请使用<b-form-input>
的
反跳
功能。
如果您的文本输入与<b-table>
的过滤器
属性相关联,
则过滤过程将针对用户键入的每个字符进行。 对于大型项目数据集,此过程可能需要一段时间,并且可能会导致文本输入显示缓慢。
为了帮助缓解这种情况,<b-table>
通过filter-debounce
属性接受一个反跳timout值(以毫秒为单位)。
默认值为0
(毫秒)。如果提供的值大于0
,
则过滤器将等待该时间,然后再更新表格结果。 如果过滤器
属性值在该超时时间到期之前发生更改,则过滤将再次延迟,直到防抖动超时时间结束。
使用时,filter-debounce
的建议值应
在100
到
200
的范围内,但其他值可能更适合您的用例。
在将提供程序过滤与项目提供程序功能 一起使用时,使用此道具会很有用,以帮助减少对后端API的调用次数。
过滤器 注意事项
有关使用过滤器
功能的示例,请参见下面的完整实例 。
<b-table>
支持内置的项目数据分页。
您可以通过将每页
属性设置为想要显示的最大行数来控制一次显示多少行,
并使用当前页
属性指定要显示的页面(从第1
页开始)。
如果将当前页
设置为大于计算的页面数的值,则不会显示任何行。
您可以将<b-pagination>
组件与<b-table>
结合使用,以提供对分页的控制。
将每页
设置为0
(默认值)将禁用本地项目分页功能。
使用项目提供者功能
如在项目 属性部分所述,通过通过项目
属性指定函数引用,可以使用函数来提供行数据(项目)。
使用以下标签属性调用提供程序函数:
provider(ctx, [callback])
ctx
是与表状态关联的上下文对象,并且包含以下五个属性:
属性
类型
描述
currentPage
Number
当前页码(从1开始,即当前页
属性的值)
perPage
Number
每页显示的最大行数(每页
属性的值)
filter
String or RegExp or Object
过滤器
属性的值
sortBy
String
当前正在排序的列键,如果未排序则为空字符串
sortDesc
Boolean
当前的排序方向(降序为true
,升序为false
)
apiUrl
String
提供给api-url
属性的值。如果未提供,则为null
。
第二个参数callback
是使用回调异步方法时的可选参数。
示例: 返回数据数组(同步):
function myProvider ( ) {
let items = []
return items || []
}
示例: 使用回调返回数据(异步):
function myProvider (ctx, callback ) {
const params = '?page=' + ctx.currentPage + '&size=' + ctx.perPage
this .fetchData('/some/url' + params)
.then(data => {
const items = data.items
callback(items)
})
.catch(() => {
callback([])
})
return null
}
示例: 使用Promise返回数据(异步):
function myProvider (ctx ) {
const promise = axios.get('/some/url?page=' + ctx.currentPage + '&size=' + ctx.perPage)
return promise.then(data => {
const items = data.items
return items || []
})
}
自动表格繁忙状态
使用项目提供程序功能时, <b-table>
自动跟踪/控制其繁忙
状态,
但是它还提供了一个繁忙
属性,可用于覆盖内部繁忙
状态
或监视<b-pagination>
当前繁忙 在您的应用程序中使用2-way.sync
修饰符声明状态。
注意:
为了允许<b-table>
完全跟踪其繁忙
状态,自定义项提供程序功能应处理来自数据源的错误,
并将空数组返回到<b-table>
。
示例: 繁忙状态的使用
<template >
<div >
<b-table
id ="my-table"
:busy.sync ="isBusy"
:items ="myProvider"
:fields ="fields"
...
> </b-table >
</div >
</template >
<script >
export default {
data () {
return {
isBusy : false
}
}
methods : {
myProvider () {
let promise = axios.get('/some/url' )
return promise.then((data ) => {
const items = data.items
return (items)
}).catch(error => {
return []
})
}
}
}
</script >
注意事项:
如果您将表手动置于繁忙
状态,则在繁忙
状态设置
为false
之前,
将不会 调用/刷新项目提供程序。
处于繁忙
状态时(在提供程序更新期间自动设置,或在手动设置时),不会 发出所有与单击相关的和悬停事件以及排序更改的事件。
提供者分页,过滤和排序
默认情况下,在将数据传递到b-table
进行显示之前,items provider功能负责
所有数据的分页,过滤和排序 。
您可以通过将以下b-table
属性设置为true
来禁用提供程序的分页,筛选和排序(分别):
属性
类型
默认值
描述
no-provider-paging
Boolean
false
如果为true
,则启用使用b-table
本地数据分页
no-provider-sorting
Boolean
false
如果为true
,则启用使用b-table
本地排序
no-provider-filtering
Boolean
false
如果为true
,则启用使用b-table
本地过滤
当no-provider-paging
为false
(默认值)时,您应仅返回最大的每页记录数。
注意事项:
<b-table>
需要引用您的分页和过滤器
,以便触发提供程序函数的调用。因此,
请确保绑定到<b-table>
上的每页
,
当前页
和
过滤器
属性以触发提供程序更新功能调用(除非您将各自的no-provider-*
属性设置为true
)。
当项目
是提供程序功能时,no-local-sorting
属性无效。
使用提供程序筛选时,您可能会发现,将
<b-form-input>
上的防反跳属性
设置为大于100
ms的值将有助于减少用户在标准中键入的对后端API的调用次数。
强制刷新表数据
您还可以通过在$root
上发出事件
refresh::table
来触发提供程序函数的刷新,其中单个参数是b-table
的id
。 您必须在表上具有唯一的id
才能起作用。
this .$root.$emit('bv::refresh::table' , 'my-table' )
Or by calling the refresh()
method on the table reference
<div >
<b-table ref ="table" ... > </b-table >
</div >
this .$refs.table.refresh()
注意:
如果表处于繁忙
状态(即当前正在运行提供程序更新),则刷新将一直等到当前更新完成。 如果当前有一个刷新待处理,并且请求一个新的刷新,则将仅发生一次刷新。
检测分类变化
通过侦听<b-table>
排序已更改
的事件,您可以检测到排序键和方向何时已更改。
<div >
<b-table @sort-changed ="sortingChanged" ... > </b-table >
</div >
排序更改
事件提供了表的当前状态上下文对象的单个参数。 此上下文对象的格式与项目提供程序功能使用的格式相同。
export default {
methods : {
sortingChanged(ctx) {
}
}
}
您也可以分别使用::sort-by.sync
和
:sort-desc.sync
双向属性来获取当前的sortBy和sortDesc值
(有关详细信息,请参见上面的排序 部分)。
<div >
<b-table :sort-by.sync ="mySortBy" :sort-desc.sync ="mySortDesc" ... > </b-table >
</div >
服务器端渲染
使用服务器端呈现(SSR)和项目
提供程序功能时,必须格外小心。 确保在获取数据时处理服务器端可能需要的任何特殊情况!
在文档中装入<b-table>
后,它将自动触发提供程序更新调用。
轻量级表格
如果只需要简单地显示表格数据,那么<b-table-lite>
提供了一个很好的替代<b-table>
的方法。
<b-table-lite>
组件提供了
<b-table>
的所有样式和格式设置功能(包括行详细信息和堆叠支持),但不包括 以下功能:
筛选
Sorting
排序
项目提供者支持
可选行
繁忙的表格状态和样式
固定顶排和底排
空行支持
表精简版作为插件
TablePlugin
包括<b-table-lite>
。
为了方便起见,BootstrapVue还提供了TableLitePlugin
,
该表仅安装<b-table-lite>
。TableLitePlugin
可以用作名为export的顶层。
简单表格
<b-table-simple>
组件使用户可以完全控制表内容的呈现,
同时提供基本的Bootstrap v4表样式。<b-table-simple>
是围绕
<table>
元素的包装器组件。
通过默认
插槽,
可以在组件内部使用任何或所有BootstrapVue表格帮助器组件 :
<b-thead>
,
<b-tfoot>
,
<b-tbody>
,
<b-tr>
,
<b-th>
,
<b-td>
,和HTML5元素
<caption>
,
<colgroup>
和
<col>
。与组件名称相反,
可以使用<b-table-simple>
创建简单或复杂的表布局。
<b-table-simple>
通过属性提供基本的样式选项:
striped
,
bordered
,
borderless
,
outlined
,
small
,
hover
,
dark
,
fixed
,
responsive
和
sticky-header
。
请注意,堆叠
模式可用,
但是需要一些额外的标记来生成单元格标题,如下面的简单表格和堆叠模式 部分所述。
还支持粘性列,但是还需要一些额外的标记来指定哪些列是粘性的。 有关使用 粘性列 的更多信息,请参见下文。
由于b-table-simple
只是一个包装器组件,您将需要在其中封装内容,
因此它不提供<b-table>
的任何高级功能(即行事件,头事件,排序,分页,过滤) ,脚步克隆,项目,字段等)。
Items sold in August, grouped by Country and City:
Region
Clothes
Accessories
Country
City
Trousers
Skirts
Dresses
Bracelets
Rings
Belgium
Antwerp
56
22
43
72
23
Gent
46
18
50
61
15
Brussels
51
27
38
69
28
The Netherlands
Amsterdam
89
34
69
85
38
Utrecht
80
12
43
36
19
Total Rows: 5
<div >
<b-table-simple hover small caption-top responsive >
<caption > Items sold in August, grouped by Country and City:</caption >
<colgroup > <col > <col > </colgroup >
<colgroup > <col > <col > <col > </colgroup >
<colgroup > <col > <col > </colgroup >
<b-thead head-variant ="dark" >
<b-tr >
<b-th colspan ="2" > Region</b-th >
<b-th colspan ="3" > Clothes</b-th >
<b-th colspan ="2" > Accessories</b-th >
</b-tr >
<b-tr >
<b-th > Country</b-th >
<b-th > City</b-th >
<b-th > Trousers</b-th >
<b-th > Skirts</b-th >
<b-th > Dresses</b-th >
<b-th > Bracelets</b-th >
<b-th > Rings</b-th >
</b-tr >
</b-thead >
<b-tbody >
<b-tr >
<b-th rowspan ="3" > Belgium</b-th >
<b-th class ="text-right" > Antwerp</b-th >
<b-td > 56</b-td >
<b-td > 22</b-td >
<b-td > 43</b-td >
<b-td variant ="success" > 72</b-td >
<b-td > 23</b-td >
</b-tr >
<b-tr >
<b-th class ="text-right" > Gent</b-th >
<b-td > 46</b-td >
<b-td variant ="warning" > 18</b-td >
<b-td > 50</b-td >
<b-td > 61</b-td >
<b-td variant ="danger" > 15</b-td >
</b-tr >
<b-tr >
<b-th class ="text-right" > Brussels</b-th >
<b-td > 51</b-td >
<b-td > 27</b-td >
<b-td > 38</b-td >
<b-td > 69</b-td >
<b-td > 28</b-td >
</b-tr >
<b-tr >
<b-th rowspan ="2" > The Netherlands</b-th >
<b-th class ="text-right" > Amsterdam</b-th >
<b-td variant ="success" > 89</b-td >
<b-td > 34</b-td >
<b-td > 69</b-td >
<b-td > 85</b-td >
<b-td > 38</b-td >
</b-tr >
<b-tr >
<b-th class ="text-right" > Utrecht</b-th >
<b-td > 80</b-td >
<b-td variant ="danger" > 12</b-td >
<b-td > 43</b-td >
<b-td > 36</b-td >
<b-td variant ="warning" > 19</b-td >
</b-tr >
</b-tbody >
<b-tfoot >
<b-tr >
<b-td colspan ="7" variant ="secondary" class ="text-right" >
Total Rows: <b > 5</b >
</b-td >
</b-tr >
</b-tfoot >
</b-table-simple >
</div >
在响应式
或粘滞标题
模式下,
<table>
元素被包装在<div>
元素内。
如果您需要将其他类应用于<table>
元素,请使用table-classes
属性。
赋予<b-table-simple>
的任何其他属性将始终应用于<table>
元素。
简单表格和堆叠模式
当表处于堆叠模式时,<b-table-simple>
主体单元格上需要一些附加标记。
具体来说,BootstrapVue使用特殊的数据属性来创建单元格的标题,您可以通过 堆栈标题
属性将其提供给<b-td>
或
<b-th>
。
仅支持纯字符串(不支持HTML标记),因为我们使用伪元素:: ::before
和 css
content
属性。
这是与上述相同的表,设置为始终堆叠,具有额外的标记要处理堆叠模式(专门用于生成单元格标题):
Items sold in August, grouped by Country and City:
Region
Clothes
Accessories
Country
City
Trousers
Skirts
Dresses
Bracelets
Rings
Belgium (3 Cities)
Antwerp
56
22
43
72
23
Gent
46
18
50
61
15
Brussels
51
27
38
69
28
The Netherlands (2 Cities)
Amsterdam
89
34
69
85
38
Utrecht
80
12
43
36
19
Total Rows: 5
<div >
<b-table-simple hover small caption-top stacked >
<caption > Items sold in August, grouped by Country and City:</caption >
<colgroup > <col > <col > </colgroup >
<colgroup > <col > <col > <col > </colgroup >
<colgroup > <col > <col > </colgroup >
<b-thead head-variant ="dark" >
<b-tr >
<b-th colspan ="2" > Region</b-th >
<b-th colspan ="3" > Clothes</b-th >
<b-th colspan ="2" > Accessories</b-th >
</b-tr >
<b-tr >
<b-th > Country</b-th >
<b-th > City</b-th >
<b-th > Trousers</b-th >
<b-th > Skirts</b-th >
<b-th > Dresses</b-th >
<b-th > Bracelets</b-th >
<b-th > Rings</b-th >
</b-tr >
</b-thead >
<b-tbody >
<b-tr >
<b-th rowspan ="3" class ="text-center" > Belgium (3 Cities)</b-th >
<b-th stacked-heading ="City" class ="text-left" > Antwerp</b-th >
<b-td stacked-heading ="Clothes: Trousers" > 56</b-td >
<b-td stacked-heading ="Clothes: Skirts" > 22</b-td >
<b-td stacked-heading ="Clothes: Dresses" > 43</b-td >
<b-td stacked-heading ="Accessories: Bracelets" variant ="success" > 72</b-td >
<b-td stacked-heading ="Accessories: Rings" > 23</b-td >
</b-tr >
<b-tr >
<b-th stacked-heading ="City" > Gent</b-th >
<b-td stacked-heading ="Clothes: Trousers" > 46</b-td >
<b-td stacked-heading ="Clothes: Skirts" variant ="warning" > 18</b-td >
<b-td stacked-heading ="Clothes: Dresses" > 50</b-td >
<b-td stacked-heading ="Accessories: Bracelets" > 61</b-td >
<b-td stacked-heading ="Accessories: Rings" variant ="danger" > 15</b-td >
</b-tr >
<b-tr >
<b-th stacked-heading ="City" > Brussels</b-th >
<b-td stacked-heading ="Clothes: Trousers" > 51</b-td >
<b-td stacked-heading ="Clothes: Skirts" > 27</b-td >
<b-td stacked-heading ="Clothes: Dresses" > 38</b-td >
<b-td stacked-heading ="Accessories: Bracelets" > 69</b-td >
<b-td stacked-heading ="Accessories: Rings" > 28</b-td >
</b-tr >
<b-tr >
<b-th rowspan ="2" class ="text-center" > The Netherlands (2 Cities)</b-th >
<b-th stacked-heading ="City" > Amsterdam</b-th >
<b-td stacked-heading ="Clothes: Trousers" variant ="success" > 89</b-td >
<b-td stacked-heading ="Clothes: Skirts" > 34</b-td >
<b-td stacked-heading ="Clothes: Dresses" > 69</b-td >
<b-td stacked-heading ="Accessories: Bracelets" > 85</b-td >
<b-td stacked-heading ="Accessories: Rings" > 38</b-td >
</b-tr >
<b-tr >
<b-th stacked-heading ="City" > Utrecht</b-th >
<b-td stacked-heading ="Clothes: Trousers" > 80</b-td >
<b-td stacked-heading ="Clothes: Skirts" variant ="danger" > 12</b-td >
<b-td stacked-heading ="Clothes: Dresses" > 43</b-td >
<b-td stacked-heading ="Accessories: Bracelets" > 36</b-td >
<b-td stacked-heading ="Accessories: Rings" variant ="warning" > 19</b-td >
</b-tr >
</b-tbody >
<b-tfoot >
<b-tr >
<b-td colspan ="7" variant ="secondary" class ="text-right" >
Total Rows: <b > 5</b >
</b-td >
</b-tr >
</b-tfoot >
</b-table-simple >
</div >
像 <b-table>
和
<b-table-lite>
一样,
在可视地堆叠表格时,可视地隐藏了表头()和页脚(
)。 如果需要页眉或页脚,可以通过在<b-tbody>
组件内部
(或在第二个<b-tbody>
组件中)创建一个额外的<b-tr>
并将其设置为columnheader
子<b-th>
单元格,
并使用Bootstrap v4响应式显示实用程序类 在表不再以视觉方式堆叠时(该断点应与堆叠的表匹配),
将某个特定断点上方的多余行(或<b-tbody>
)隐藏起来 您已设置的断点),
即<b-tr class="d-md-none">
会在中等和较宽的屏幕上隐藏该行,
而<b-tbody class="d-md-none">
会将该行隐藏 在中型和大型屏幕上分组。
注意事项:
<b-table-simple>
的堆栈模式要求您使用BootstrapVue表格帮助器组件 。
常规 <tbody>
,
<tr>
,
<td>
和<th>
>元素标签的使用将无法按预期方式工作,
也不会自动应用任何必需的可访问性属性。
简单表格和粘性列
<b-table-simple>
支持粘性列,
但是您将需要在要粘性列
中的每个表单元格
(thead
,
tbody
,和
tfoot
行组中)上设置粘性列支持。 例如:
<b-table-simple responsive >
<b-thead >
<b-tr >
<b-th sticky-column > Sticky Column Header</b-th >
<b-th > Heading 1</b-th >
<b-th > Heading 2</b-th >
<b-th > Heading 3</b-th >
<b-th > Heading 4</b-th >
</b-tr >
</b-thead >
<b-tbody >
<b-tr >
<b-th sticky-column > Sticky Column Row Header</b-th >
<b-td > Cell</b-td >
<b-td > Cell</b-td >
<b-td > Cell</b-td >
<b-td > Cell</b-td >
</b-tr >
<b-tr >
<b-th sticky-column > Sticky Column Row Header</b-th >
<b-td > Cell</b-td >
<b-td > Cell</b-td >
<b-td > Cell</b-td >
<b-td > Cell</b-td >
</b-tr >
</b-tbody >
<b-tfoot >
<b-tr >
<b-th sticky-column > Sticky Column Footer</b-th >
<b-th > Heading 1</b-th >
<b-th > Heading 2</b-th >
<b-th > Heading 3</b-th >
<b-th > Heading 4</b-th >
</b-tr >
</b-tfoot >
</b-table-responsive >
与<b-table>
和
<b-table-lite>
一样,
当将 堆叠
属性设置在<b-table-simple>
上时,不支持粘性列。
表格简单易用
TablePlugin
包括<b-table-simple>
和所有帮助程序组件。
为了方便起见,BootstrapVue还提供了TableSimplePlugin
,
该表可安装<b-table-simple>
和所有帮助程序组件。
TableSimplePlugin
可以用作名为export的顶层。
表格助手组件
当使用<b-table-simple>
或命名槽
top-row
,
bottom-row
,
thead-top
,和
custom-foot
(所有这些都接受表子元素)时,BootstrapVue提供了其他辅助子组件。 帮助器组件如下:
b-tbody
(<b-table-simple>
only)
b-thead
(<b-table-simple>
only)
b-tfoot
(<b-table-simple>
only)
b-tr
b-td
b-th
这些组件经过优化,可以处理将变体转换为适当的类(例如处理表格暗
模式),
并自动应用某些辅助功能属性(即角色
和
作用域
)。
他们还可以生成堆积表以及粘性标题和列,标记。组件<b-table>
和
<b-table-lite>
在内部使用这些帮助程序组件。
在简单表 示例中,
我们使用帮助器组件<b-thead>
,
<b-tbody>
,
<b-tr>
,
<b-th>
,
<b-tr>
和
<b-tfoot>
。
虽然您可以在<b-table-simple>
中使用常规表子元素
(即<tbody>
,
<tr>
,
<td>
等),
并在顶部行
,底部行
和
thead-top
中使用命名的插槽,
建议使用这些BootstrapVue表<b-t*>
帮助器组件。
请注意,没有<caption>
,
<colgroup>
或
<col>
的帮助器组件,因此您可以直接在<b-table-simple>
中使用这三个HTML5元素。
表格助手组件<b-tr>
,
<b-td>
和
<b-th>
都接受variant
属性,
它将应用Bootstrap主题颜色之一(通过主题化 支持自定义主题颜色),
并将自动调整为 根据表格的暗
模式使用正确的变体类。
辅助组件<b-thead>
,
<b-tfoot>
分别接受head-variant
和
foot-variant
属性。
支持的值是'dark'
,
'light'
或
null
(
null
使用默认的表格背景)。
这些变体还控制文本颜色(“深色”
变体为浅色文本,
“浅色”
变体为深色文本)。
可访问性属性的角色
和
作用域
会根据其位置
(thead,tbody或tfoot)及其行距
或
colspan
属性在
<b-th>
和
<b-td>
组件上自动设置。
您可以通过在帮助程序组件上设置适当的属性来覆盖自动 作用域
和
角色
值。
对于<b-tbody>
,
<b-thead>
,和
<b-tfoot>
帮助器组件,
将应用适当的默认'rowgroup'
,除非您通过提供角色
属性来
覆盖角色
。
对于<b-tr>
帮助器组件,除非您通过提供角色
属性来覆盖
角色
,否则将应用适当的默认角色“行”
。
<b-tr>
不添加范围
。
当使用tbody-transition-props
和
tbody-transition-handlers
属性中的一个或两个时,
<b-tbody>
元素支持渲染Vue<transition-group>
。
有关更多详细信息,请参见 表格内容过渡支持 部分。
辅助功能
当使用特定功能时,<b-table>
和
<b-table-lite>
组件将尝试提供可能的最佳可访问性标记。
在辅助表组件中使用<b-table-simple>
时,元素将默认应用适当的角色,您可以选择覆盖这些角色。
在<b-table-simple>
帮助器组件上使用单击处理程序时,将需要应用适当的aria-*
属性,
并设置tabindex="0"
以使屏幕阅读器和纯键盘用户可以访问该单击操作。 您还应该收听@keydown.enter。
阻止
用户按ENTER 触发您单击单元格或行(仅键盘用户可访问性要求)。
标题可访问性
当列(字段)是可排序的(仅<b-table>
)
或注册了单击鼠标左键的侦听器(<b-table>
和<b-table-lite>
)时,
页眉(和页脚) <th>
单元格将放置在文档选项卡序列中
(通过tabindex="0"
),以供纯键盘和屏幕阅读器用户访问,以便用户可以触发单击(通过在标题单元格上按ENTER 键)。
数据行可访问性
当表处于可选
模式(仅<b-table>
,
并且未设置属性 no-select-on-click
)时,
或者如果注册了行单击
事件监听器(<b-table>
和
<b-table-lite>
),
所有数据项行(<tr>
元素)
都将放入文档选项卡序列中(通过tabindex="0"
),以使纯键盘和屏幕阅读器用户可以通过按ENTER
键来单击行或SPACE 。
将表项目行按文档选项卡顺序放置(<b-table>
和
<b-table-lite>
)时,它们在集中时也将支持基本的键盘导航:
DOWN 将移至下一行
UP 将移至上一行
END or DOWN +SHIFT 将移至最后一行
HOME or UP +SHIFT 将移至第一行
ENTER or SPACE 单击该行。
行事件可访问性
请注意,以下基于行的事件/操作(可用于<b-table>
和<b-table-lite>
)被认为是不可访问的,并且仅应在功能不重要或可以通过其他方式提供的情况下使用:
row-dblclicked
row-contextmenu
row-hovered
row-unhovered
row-middle-clicked
请注意,并非所有浏览器(即IE,Safari和大多数移动浏览器)都支持行单击中间事件
。
当侦听源自不支持输入或导航的元素的行单击中间事件
时,
您通常会希望明确阻止其他默认操作映射到鼠标中键的向下操作。 在Windows上通常是自动滚动,在macOS和Linux上通常是剪贴板粘贴。 这可以通过防止mousedown
或
pointerdown
事件的默认行为来完成。
此外,您可能需要避免在右键单击后打开默认系统或浏览器上下文菜单。 由于操作系统之间的时间差异,这也不是行中间单击
可预防的默认行为。
而是可以通过防止row-contextmenu
事件的默认行为来完成此操作。
建议您在尽可能多的浏览器和设备变体中测试您的应用,以确保您的应用能够处理各种与事件不一致的情况。
完整的例子
Person Full name (Click to sort Ascending)
Person age (Click to sort Ascending)
is Active (Click to sort Ascending)
Actions
Dickerson Macdonald
40
Yes
Info modal
Show Details
Larsen Shaw
21
No
Info modal
Show Details
Mini Navarro
9
No
Info modal
Show Details
Geneva Wilson
89
No
Info modal
Show Details
Jami Carney
38
Yes
Info modal
Show Details
<template >
<b-container fluid >
<b-row >
<b-col lg ="6" class ="my-1" >
<b-form-group
label ="Sort"
label-cols-sm ="3"
label-align-sm ="right"
label-size ="sm"
label-for ="sortBySelect"
class ="mb-0"
>
<b-input-group size ="sm" >
<b-form-select v-model ="sortBy" id ="sortBySelect" :options ="sortOptions" class ="w-75" >
<template v-slot:first >
<option value ="" > -- none --</option >
</template >
</b-form-select >
<b-form-select v-model ="sortDesc" size ="sm" :disabled ="!sortBy" class ="w-25" >
<option :value ="false" > Asc</option >
<option :value ="true" > Desc</option >
</b-form-select >
</b-input-group >
</b-form-group >
</b-col >
<b-col lg ="6" class ="my-1" >
<b-form-group
label ="Initial sort"
label-cols-sm ="3"
label-align-sm ="right"
label-size ="sm"
label-for ="initialSortSelect"
class ="mb-0"
>
<b-form-select
v-model ="sortDirection"
id ="initialSortSelect"
size ="sm"
:options ="['asc', 'desc', 'last']"
> </b-form-select >
</b-form-group >
</b-col >
<b-col lg ="6" class ="my-1" >
<b-form-group
label ="Filter"
label-cols-sm ="3"
label-align-sm ="right"
label-size ="sm"
label-for ="filterInput"
class ="mb-0"
>
<b-input-group size ="sm" >
<b-form-input
v-model ="filter"
type ="search"
id ="filterInput"
placeholder ="Type to Search"
> </b-form-input >
<b-input-group-append >
<b-button :disabled ="!filter" @click ="filter = ''" > Clear</b-button >
</b-input-group-append >
</b-input-group >
</b-form-group >
</b-col >
<b-col lg ="6" class ="my-1" >
<b-form-group
label ="Filter On"
label-cols-sm ="3"
label-align-sm ="right"
label-size ="sm"
description ="Leave all unchecked to filter on all data"
class ="mb-0" >
<b-form-checkbox-group v-model ="filterOn" class ="mt-1" >
<b-form-checkbox value ="name" > Name</b-form-checkbox >
<b-form-checkbox value ="age" > Age</b-form-checkbox >
<b-form-checkbox value ="isActive" > Active</b-form-checkbox >
</b-form-checkbox-group >
</b-form-group >
</b-col >
<b-col sm ="5" md ="6" class ="my-1" >
<b-form-group
label ="Per page"
label-cols-sm ="6"
label-cols-md ="4"
label-cols-lg ="3"
label-align-sm ="right"
label-size ="sm"
label-for ="perPageSelect"
class ="mb-0"
>
<b-form-select
v-model ="perPage"
id ="perPageSelect"
size ="sm"
:options ="pageOptions"
> </b-form-select >
</b-form-group >
</b-col >
<b-col sm ="7" md ="6" class ="my-1" >
<b-pagination
v-model ="currentPage"
:total-rows ="totalRows"
:per-page ="perPage"
align ="fill"
size ="sm"
class ="my-0"
> </b-pagination >
</b-col >
</b-row >
<b-table
show-empty
small
stacked ="md"
:items ="items"
:fields ="fields"
:current-page ="currentPage"
:per-page ="perPage"
:filter ="filter"
:filterIncludedFields ="filterOn"
:sort-by.sync ="sortBy"
:sort-desc.sync ="sortDesc"
:sort-direction ="sortDirection"
@filtered ="onFiltered"
>
<template v-slot:cell (name )="row" >
{{ row.value.first }} {{ row.value.last }}
</template >
<template v-slot:cell (actions )="row" >
<b-button size ="sm" @click ="info(row.item, row.index, $event.target)" class ="mr-1" >
Info modal
</b-button >
<b-button size ="sm" @click ="row.toggleDetails" >
{{ row.detailsShowing ? 'Hide' : 'Show' }} Details
</b-button >
</template >
<template v-slot:row-details ="row" >
<b-card >
<ul >
<li v-for ="(value, key) in row.item" :key ="key" > {{ key }}: {{ value }}</li >
</ul >
</b-card >
</template >
</b-table >
<b-modal :id ="infoModal.id" :title ="infoModal.title" ok-only @hide ="resetInfoModal" >
<pre > {{ infoModal.content }}</pre >
</b-modal >
</b-container >
</template >
<script >
export default {
data() {
return {
items : [
{ isActive : true , age : 40 , name : { first : 'Dickerson' , last : 'Macdonald' } },
{ isActive : false , age : 21 , name : { first : 'Larsen' , last : 'Shaw' } },
{
isActive : false ,
age : 9 ,
name : { first : 'Mini' , last : 'Navarro' },
_rowVariant : 'success'
},
{ isActive : false , age : 89 , name : { first : 'Geneva' , last : 'Wilson' } },
{ isActive : true , age : 38 , name : { first : 'Jami' , last : 'Carney' } },
{ isActive : false , age : 27 , name : { first : 'Essie' , last : 'Dunlap' } },
{ isActive : true , age : 40 , name : { first : 'Thor' , last : 'Macdonald' } },
{
isActive : true ,
age : 87 ,
name : { first : 'Larsen' , last : 'Shaw' },
_cellVariants : { age : 'danger' , isActive : 'warning' }
},
{ isActive : false , age : 26 , name : { first : 'Mitzi' , last : 'Navarro' } },
{ isActive : false , age : 22 , name : { first : 'Genevieve' , last : 'Wilson' } },
{ isActive : true , age : 38 , name : { first : 'John' , last : 'Carney' } },
{ isActive : false , age : 29 , name : { first : 'Dick' , last : 'Dunlap' } }
],
fields : [
{ key : 'name' , label : 'Person Full name' , sortable : true , sortDirection : 'desc' },
{ key : 'age' , label : 'Person age' , sortable : true , class : 'text-center' },
{
key : 'isActive' ,
label : 'is Active' ,
formatter : (value, key, item ) => {
return value ? 'Yes' : 'No'
},
sortable : true ,
sortByFormatted : true ,
filterByFormatted : true
},
{ key : 'actions' , label : 'Actions' }
],
totalRows : 1 ,
currentPage : 1 ,
perPage : 5 ,
pageOptions : [5 , 10 , 15 ],
sortBy : '' ,
sortDesc : false ,
sortDirection : 'asc' ,
filter : null ,
filterOn : [],
infoModal : {
id : 'info-modal' ,
title : '' ,
content : ''
}
}
},
computed : {
sortOptions() {
return this .fields
.filter(f => f.sortable)
.map(f => {
return { text : f.label, value : f.key }
})
}
},
mounted() {
this .totalRows = this .items.length
},
methods : {
info(item, index, button) {
this .infoModal.title = `Row index: ${index} `
this .infoModal.content = JSON .stringify(item, null , 2 )
this .$root.$emit('bv::show::modal' , this .infoModal.id, button)
},
resetInfoModal() {
this .infoModal.title = ''
this .infoModal.content = ''
},
onFiltered(filteredItems) {
this .totalRows = filteredItems.length
this .currentPage = 1
}
}
}
</script >
组件引用
属性
属性 (Click to sort Ascending)
类型
默认值
描述
id
String
用于在渲染的内容上设置“id”属性,并用作根据需要生成任何其他元素ID的基础
items
Array or Function
[]
要显示的项目数组,或项目提供程序功能参考。 有关详细信息,请参阅文档
fields
Array
字段名称数组或字段定义对象数组
primary-key
String
表字段的名称,每行包含一个保证的唯一值。 需要tbody转换支持,并且还可以加速表格渲染
value
Array
[]
当前显示的行数据 只读 不要为此属性设置值
striped
Boolean
false
将条纹应用于内容行
bordered
Boolean
false
为所有单元格和标题添加边框
borderless
Boolean
false
删除单元格的所有边框
outlined
Boolean
false
向表格元素添加轮廓边框
dark
Boolean
false
将桌子置于暗模式
hover
Boolean
false
在行上启用悬停样式
small
Boolean
false
用较小的单元格填充表
fixed
Boolean
false
使所有列均等宽(固定布局表)。 将加快大型表的渲染。 列宽可以通过CSS或colgroup设置
responsive
Boolean or String
false
使表格在宽度上响应,并添加水平滚动条。 设置为true表示始终响应,或设置为从响应切换为正常的断点之一:“ sm”,“ md”,“ lg”,“ xl”
no-border-collapse
v2.0.0+
Boolean
false
禁用表格边框的折叠。 当表格具有粘性标题或列时很有用
caption-top
Boolean
false
可视地将表格标题放在表格上方。 默认值如下。
table-variant
String
将Bootstrap主题颜色变体应用于整个表格
table-class
String or Array or Object
CSS类(或多个类)应用于表元素
stacked
Boolean or String
false
将表格放在堆叠模式。 为始终堆叠设置为true,或设置为从堆叠切换为正常的断点之一:'sm','md','lg','xl'
head-variant
String
标头变体:“浅”或“暗”,或未设置。 可能优先于行头变量
head-row-variant
v2.1.0+
String
将Bootstrap主题颜色变体应用于thead中的tr元素
thead-class
String or Array or Object
CSS类(适用于thead元素)
thead-tr-class
String or Array or Object
CSS类(一个或多个)应用于thead中的tr元素
tbody-tr-class
String or Array or Object or Function
CSS类(或多个类)应用于tbody中的tr元素。 可以是返回类的函数(有关详细信息,请参阅文档)
tbody-tr-attr
v2.2.0+
Object or Function
要添加到tbody中每个tr的属性,或返回此类属性的函数(有关详细信息,请参阅文档)
details-td-class
v2.1.0+
String or Array or Object
CSS类(或多个类)应用于详细信息行中的td元素
tbody-transition-props
Object
Vue的“过渡组”属性。 提供时将使tbody成为Vue的“过渡组”组件
tbody-transition-handlers
Object
Vue“过渡组”事件处理程序。 提供时将使tbody成为Vue的“过渡组”组件
tbody-class
String or Array or Object
CSS类(或多个类)应用于tbody元素
filter
String or RegExp or Object or Array
过滤条件。 内部过滤仅支持字符串或RegExpr条件。
filter-function
Function
引用要使用的功能,而不是内部过滤功能。 有关详细信息,请参阅文档
filter-ignored-fields
Array
过滤项目数据时要忽略的顶级字段数组
filter-included-fields
Array
过滤时要包括的字段数组。 覆盖filter-ignore-fields
filter-debounce
v2.0.0+ Deprecated
Number or String
0
过滤记录之前消除对过滤条件的更改的时间(以毫秒为单位)
不建议使用“过滤器反跳”属性。 请使用"<b-form-input>"的去抖动功能。
sort-by
String
当前正在排序的字段名称。 设置为null可清除排序。 可与.sync属性修改器同步
sort-desc
Boolean
false
设置为true以按降序对列进行排序。 可与.sync属性修改器同步
sort-direction
String
'asc'
用于按“ asc”,“ desc”或“ last”对未排序列进行排序的初始排序方向(以使用先前的排序方向)
sort-compare
Function
对用于对两行数据进行排序比较的函数的引用。 默认为内部排序比较例程。 有关详细信息,请参阅文档
sort-compare-options
Object
{'numeric':true}
包含“ String.prototype.sortLocale”方法的排序配置的对象。 有关详细信息,请参阅文档
sort-compare-locale
String or Array
在排序时指定语言的语言环境字符串(或语言环境字符串数组)。 有关详细信息,请参阅文档
sort-null-last
Boolean
false
排序时,将首先对null和undefined值进行排序(或最后排序,具体取决于'sort-desc')。 设置此属性可以最后对空值排序。 仅适用于内部排序
no-sort-reset
Boolean
false
当一个表是可排序的时,单击任何不可排序的列标题将清除当前的排序值。 设置此道具以禁用此功能
label-sort-asc
String
'Click to sort Ascending'
单击单元格时在标题单元格中放置的隐藏字符串会将排序方向更改为升序
label-sort-desc
String
'Click to sort Descending'
单击单元格时在标题单元格中放置的隐藏字符串会将排序方向更改为降序
label-sort-clear
String
'Click to clear sorting'
单击单元格时隐藏在标题单元格中的字符串将清除当前排序方向
no-local-sorting
Boolean
false
禁用内部排序例程,并希望用户提供已排序的项目。 排序控件仍然可用
sort-icon-left
Boolean
false
将排序控件放置在标题文本的左侧。 默认值位于标题文本的右侧
per-page
Number or String
0
每页显示的行数。 设置为0禁用分页
current-page
Number or String
1
对表进行分页时要显示的当前页码。 从1开始
caption
String
放置在标题元素中的文本字符串
caption-html
Use with caution
String
放置在标题元素中的HTML字符串。 谨慎使用
selectable
Boolean
false
设置后,将表主体行置于可选模式
select-mode
String
'multi'
设置为“可选”时,表格的可选模式。 可能的值:“单”,“多”或“范围”
selected-variant
String
'active'
Bootstrap颜色主题变体,用于将选定的行设置为该颜色。 使用任何标准的Bootstrap主题颜色变体,或特殊的表行变体“ active”(默认)。 设置为空字符串不使用变体
no-select-on-click
v2.1.0+
Boolean
false
通过点击事件禁用行选择。 行选择将仅以编程方式可用
show-empty
Boolean
false
启用后,没有要显示的项目记录,将显示一条消息,提示没有行显示
empty-text
String
'There are no records to show'
当表格中没有要显示的项目时显示的文本字符串
empty-html
Use with caution
String
当表格中没有要显示的项目时显示的HTML字符串。 谨慎使用
empty-filtered-text
String
'There are no records matching your request'
当表格由于过滤而没有要显示的项目时显示的文本字符串
empty-filtered-html
Use with caution
String
当表格由于过滤而没有要显示的项目时显示的HTML字符串。 谨慎使用
busy
Boolean
false
设置时,将表强制为繁忙状态。在调用项提供程序功能时自动设置
no-provider-paging
Boolean
false
设置后,使用内部分页对数据进行分页。 否则,项目提供者应执行分页
no-provider-sorting
Boolean
false
设置后,使用内部排序对数据进行排序。 否则,项目提供者应执行排序
no-provider-filtering
Boolean
false
设置后,使用内部过滤对数据进行分页。 否则,期望提供者执行过滤
api-url
String
通过道具。 作为上下文对象的一部分传递给项目提供者函数
警告:
当传递原始用户提供的值时,支持HTML字符串(*-html
)的道具可能容易
受到 跨站点脚本(XSS)攻击 。
您必须先对用户输入进行正确的 清理 !
插槽
插槽名称 (Click to sort Ascending)
描述
范围
cell({key})
作用域插槽,用于字段数据的自定义数据呈现。 “ {key}”是字段的键名。 有关范围数据,请参阅文档
Scope
cell()
用于字段数据的自定义数据呈现的默认作用域插槽。 有关范围数据,请参阅文档
Scope
head({key})
用于自定义呈现字段标题的作用域插槽。 “ {key}”是字段的键名。 有关范围标头,请参见文档
Scope
head()
用于自定义呈现字段标题的默认作用域插槽。 有关范围标头,请参见文档
Scope
table-caption
在表格的标题元素中显示的内容
table-colgroup
放置自定义colgroup和col元素的插槽。 可选范围
Scope
table-busy
表处于繁忙状态时用于放置加载消息的可选插槽
row-details
作用域插槽,用于可选呈现其他记录详细信息。 请参阅文档以获取行详细信息支持
Scope
empty
当“项目”数组中没有项目时显示的内容。 可选范围
Scope
emptyfiltered
在过滤后的“项目”数组中不存在任何项目时显示的内容。 可选范围
Scope
thead-top
用户提供的带有B-TH / B-TD的B-TR的`thead`元素中列标题上方的插槽。 可选范围。
Scope
top-row
用户提供的B-TD单元的固定顶部行插槽。 可选范围
Scope
bottom-row
用户提供的B-TD单元的固定底部行插槽。 可选范围
Scope
事件
事件
参数
描述
row-clicked
item
- 单击的行的项目数据。
index
- 单击的行的索引。
event
- 本机事件对象。
单击某行时发出。
row-dblclicked
item
- 双击该行的项目数据。
index
- 双击行的索引。
event
- 本机事件对象。
双击某行时发出。
row-middle-clicked
item
- 该行的项目数据被单击中。
index
- 该行的索引处于中间单击状态。
event
- 本机事件对象。
在单击鼠标中键时发出。
row-hovered
item
- 悬停的行的项目数据。
index
- 悬停的行的索引。
event
- 本机事件对象。
悬停时发出。
row-unhovered
item
- 该行的项目数据未悬停。
index
- 未悬停的行的索引。
event
- 本机事件对象。
当行未悬停时发出。
row-selected
rows
- 所选行项目的数组。
在选择或取消选择一个或多个行时触发。
head-clicked
key
- 单击列键(字段名称)。
field
- 字段定义对象。
event
- 本机事件对象。
isFooter
-
如果事件来自于页脚单元格,则为“ True”
单击页眉或页脚单元格时发出。 不适用于“自定义脚”插槽。
sort-changed
ctx
- 表状态上下文对象。 参见文档。
当表格上的排序更改时发出
context-changed
ctx
- 表状态上下文对象。 参见文档。
表状态上下文更改时发出
filtered
filteredItems
-
过滤后的项目数组(在发生本地分页之前)。
当本地过滤导致项目数更改时发出。
refreshed
当项目提供程序功能返回数据时发出。
$root
事件监听器
您可以通过在$root上发出以下事件来控制<b-table>
:
事件
参数
描述
bv::refresh::table
id
- 通过表格ID以刷新数据
在$ root上发出此事件时刷新特定表格的数据
属性
属性 (Click to sort Ascending)
类型
默认值
描述
id
String
用于在渲染的内容上设置“id”属性,并用作根据需要生成任何其他元素ID的基础
items
Array
[]
要显示的项目数组
fields
Array
字段名称数组或字段定义对象数组
primary-key
String
表字段的名称,每行包含一个保证的唯一值。 需要tbody转换支持,并且还可以加速表格渲染
value
Array
[]
当前显示的行数据 只读 不要为此属性设置值
striped
Boolean
false
将条纹应用于内容行
bordered
Boolean
false
为所有单元格和标题添加边框
borderless
Boolean
false
删除单元格的所有边框
outlined
Boolean
false
向表格元素添加轮廓边框
dark
Boolean
false
将表格置于暗模式
hover
Boolean
false
在行上启用悬停样式
small
Boolean
false
用较小的单元格填充表格
fixed
Boolean
false
使所有列均等宽(固定布局表)。 将加快大型表的渲染。 列宽可以通过CSS或colgroup设置
responsive
Boolean or String
false
使表格在宽度上响应,并添加水平滚动条。 设置为true表示始终响应,或设置为从响应切换为正常的断点之一:“ sm”,“ md”,“ lg”,“ xl”
no-border-collapse
v2.0.0+
Boolean
false
禁用表格边框的折叠。 当表格具有粘性标题或列时很有用
caption-top
Boolean
false
可视地将表格标题放在表格上方。默认值如下。
table-variant
String
将Bootstrap主题颜色变体应用于整个表格
table-class
String or Array or Object
CSS类(或多个类)应用于表元素
stacked
Boolean or String
false
将桌子放在堆叠模式。 为始终堆叠设置为true,或设置为从堆叠切换为正常的断点之一:'sm','md','lg','xl'
head-variant
String
标头变体:“浅”或“暗”,或未设置。 可能优先于行头变量
head-row-variant
v2.1.0+
String
将Bootstrap主题颜色变体应用于thead中的tr元素
thead-class
String or Array or Object
CSS类(适用于thead元素)
thead-tr-class
String or Array or Object
CSS类(一个或多个)应用于thead中的tr元素
tbody-tr-class
String or Array or Object or Function
CSS类(或多个类)应用于tbody中的tr元素。 可以是返回类的函数(有关详细信息,请参阅文档)
tbody-tr-attr
v2.2.0+
Object or Function
要添加到tbody中每个tr的属性,或返回此类属性的函数(有关详细信息,请参阅文档)
details-td-class
v2.1.0+
String or Array or Object
CSS类(或多个类)应用于详细信息行中的td元素
tbody-transition-props
Object
Vue的“过渡组”属性。提供时将使tbody成为Vue的“过渡组”组件
tbody-transition-handlers
Object
Vue“过渡组”事件处理程序。提供时将使tbody成为Vue的“过渡组”组件
tbody-class
String or Array or Object
CSS类(或多个类)应用于tbody元素
caption
String
放置在标题元素中的文本字符串
caption-html
Use with caution
String
放置在标题元素中的HTML字符串。谨慎使用
警告:
当传递原始用户提供的值时,支持HTML字符串(*-html
)的属性
可能容易受到 跨站点脚本(XSS)攻击 。
您必须先对用户输入进行正确的 清理 !
插槽
插槽名称 (Click to sort Ascending)
描述
范围
cell({key})
作用域插槽,用于字段数据的自定义数据呈现。“{key}”是字段的键名。
Scope
cell()
用于字段数据的自定义数据呈现的默认作用域插槽。
Scope
head({key})
用于自定义呈现字段标题的作用域插槽。“{key}”是字段的键名
Scope
head()
用于自定义呈现字段标题的默认作用域插槽。
Scope
table-caption
在表格的标题元素中显示的内容
table-colgroup
放置自定义colgroup和col元素的插槽。可选范围
Scope
row-details
作用域插槽,用于可选呈现其他记录详细信息。请参阅文档以获取行详细信息支持
Scope
thead-top
用户提供的带有B-TH/B-TD的B-TR的`thead`元素中列标题上方的插槽。可选范围。
Scope
事件
事件
参数
描述
row-clicked
item
- 单击的行的项目数据。
index
- 单击的行的索引。
event
- 本机事件对象。
单击某行时发出。
row-dblclicked
item
- 双击该行的项目数据。
index
- 双击行的索引。
event
- 本机事件对象。
双击某行时发出。
row-middle-clicked
item
- 该行的项目数据被单击中。
index
- 该行的索引处于中间单击状态。
event
- 本机事件对象。
在单击鼠标中键时发出。
row-hovered
item
- 悬停的行的项目数据。
index
- 悬停的行的索引。
event
- 本机事件对象。
悬停时发出。
row-unhovered
item
- 该行的项目数据未悬停。
index
- 未悬停的行的索引。
event
- 本机事件对象。
当行未悬停时发出。
head-clicked
key
- 单击列键(字段名称)。
field
- 字段定义对象。
event
- 本机事件对象。
isFooter
-
如果事件来自于页脚单元格,则为“ True”
单击页眉或页脚单元格时发出。 不适用于“自定义脚”插槽。
Properties
属性 (Click to sort Ascending)
类型
默认值
描述
id
String
用于在渲染的内容上设置“id”属性,并用作根据需要生成任何其他元素ID的基础
striped
Boolean
false
将条纹应用于内容行
bordered
Boolean
false
为所有单元格和标题添加边框
borderless
Boolean
false
删除单元格的所有边框
outlined
Boolean
false
向表格元素添加轮廓边框
dark
Boolean
false
将表格置于暗模式
hover
Boolean
false
在行上启用悬停样式
small
Boolean
false
用较小的单元格填充表
fixed
Boolean
false
使所有列均等宽(固定布局表)。 将加快大型表的渲染。 列宽可以通过CSS或colgroup设置
responsive
Boolean or String
false
使表格在宽度上响应,并添加水平滚动条。 设置为true表示始终响应,或设置为从响应切换为正常的断点之一:“ sm”,“ md”,“ lg”,“ xl”
no-border-collapse
v2.0.0+
Boolean
false
禁用表格边框的折叠。 当表格具有粘性标题或列时很有用
caption-top
Boolean
false
可视地将表格标题放在表格上方。 默认值如下。
table-variant
String
将Bootstrap主题颜色变体应用于整个表格
table-class
String or Array or Object
CSS类(或多个类)应用于表元素
stacked
Boolean or String
false
将桌子放在堆叠模式。 为始终堆叠设置为true,或设置为从堆叠切换为正常的断点之一:'sm','md','lg','xl'
Properties
属性
类型
默认值
描述
tbody-transition-props
Object
Vue的“过渡组”属性。提供时将使tbody成为Vue的“过渡组”组件
tbody-transition-handlers
Object
Vue“过渡组”事件处理程序。提供时将使tbody成为Vue的“过渡组”组件
Properties
属性
类型
默认值
描述
head-variant
String
标头变体:“浅”或“暗”,或未设置
Properties
属性
类型
默认值
描述
variant
String
将Bootstrap主题颜色变体之一应用于组件
Properties
属性
类型
默认值
描述
variant
String
将Bootstrap主题颜色变体之一应用于组件
colspan
Number or String
该单元格跨越的列数
rowspan
Number or String
该单元格跨越的行数
stacked-heading
String
在堆叠模式下前往单元格。 仅适用于“ tbody”元素中的单元格
sticky-column
Boolean
false
如果这将是粘性列。 必须在此列的所有单元格上进行设置。 表格必须处于粘页眉或响应模式下才能工作
Properties
属性
类型
默认值
描述
variant
String
将Bootstrap主题颜色变体之一应用于组件
colspan
Number or String
该单元格跨越的列数
rowspan
Number or String
该单元格跨越的行数
stacked-heading
String
在堆叠模式下前往单元格。 仅适用于“ tbody”元素中的单元格
sticky-column
Boolean
false
如果这将是粘性列。 必须在此列的所有单元格上进行设置。 表格必须处于粘页眉或响应模式下才能工作
导入单个组件
您可以通过以下命名的导出将单个组件导入到项目中:
组件
命名输出
导入路径
<b-table>
BTable
bootstrap-vue
<b-table-lite>
BTableLite
bootstrap-vue
<b-table-simple>
BTableSimple
bootstrap-vue
<b-tbody>
BTbody
bootstrap-vue
<b-thead>
BThead
bootstrap-vue
<b-tfoot>
BTfoot
bootstrap-vue
<b-tr>
BTr
bootstrap-vue
<b-td>
BTd
bootstrap-vue
<b-th>
BTh
bootstrap-vue
示例:
import { BTable } from 'bootstrap-vue'
Vue.component('b-table' , BTable)
导入为Vue.js插件
该插件包括上面列出的所有单个组件。插件还包括任何组件别名。
命名输出
导入路径
TablePlugin
bootstrap-vue
该插件还自动包括以下插件:
TableLitePlugin
TableSimplePlugin
示例:
import { TablePlugin } from 'bootstrap-vue'
Vue.use(TablePlugin)