- Tabs 标签页
- 概述
- 代码示例
- API
- Tabs props
- Tabs events
- Tabs slot
- TabPane props
Tabs 标签页
概述
选项卡切换组件,常用于平级区域大块内容的的收纳和展现。
代码示例
基础用法
value
与 TabPane
的 name
对应,用于标识当前激活的是哪一项,name 值默认从 0 开始,默认激活第一项。可以使用 v-model 双向绑定数据。
<template>
<Tabs value="name1">
<TabPane label="标签一" name="name1">标签一的内容</TabPane>
<TabPane label="标签二" name="name2">标签二的内容</TabPane>
<TabPane label="标签三" name="name3">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
}
</script>
禁用
禁用某一项。
<template>
<Tabs>
<TabPane label="标签一">标签一的内容</TabPane>
<TabPane label="标签二" disabled>标签二的内容</TabPane>
<TabPane label="标签三">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
}
</script>
图标
通过设置属性 icon
,可以显示一个图标。
<template>
<Tabs>
<TabPane label="macOS" icon="logo-apple">标签一的内容</TabPane>
<TabPane label="Windows" icon="logo-windows">标签二的内容</TabPane>
<TabPane label="Linux" icon="logo-tux">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
}
</script>
迷你型
设置属性 size
为 small
可以显示为迷你型,只在 type
为 line
时有效。
<template>
<Tabs size="small">
<TabPane label="标签一">标签一的内容</TabPane>
<TabPane label="标签二">标签二的内容</TabPane>
<TabPane label="标签三">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
}
</script>
卡片样式
设置属性 type
为 card
可以显示卡片样式,常用于容器顶部。
<template>
<Tabs type="card">
<TabPane label="标签一">标签一的内容</TabPane>
<TabPane label="标签二">标签二的内容</TabPane>
<TabPane label="标签三">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
}
</script>
可关闭
通过设置属性 closable
可以关闭某一项,仅在 type
为 card
时有效。
需结合 @on-tab-remove 事件手动关闭标签页。
<template>
<Tabs type="card" closable @on-tab-remove="handleTabRemove">
<TabPane label="标签一" v-if="tab0">标签一的内容</TabPane>
<TabPane label="标签二" v-if="tab1">标签二的内容</TabPane>
<TabPane label="标签三" v-if="tab2">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
data () {
return {
tab0: true,
tab1: true,
tab2: true
}
},
methods: {
handleTabRemove (name) {
this['tab' + name] = false;
}
}
}
</script>
自定义标签页
设置 label 为 Render 函数后,可以自定义标签页的内容。
学习 Render 函数的内容
<template>
<Tabs value="name1">
<TabPane :label="label" name="name1">标签一的内容</TabPane>
<TabPane label="标签二" name="name2">标签二的内容</TabPane>
<TabPane label="标签三" name="name3">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
data () {
return {
label: (h) => {
return h('div', [
h('span', '标签一'),
h('Badge', {
props: {
count: 3
}
})
])
}
}
}
}
</script>
附加内容
设置 slot extra
可以在页签右边添加附加操作。
<template>
<Tabs type="card">
<TabPane v-for="tab in tabs" :key="tab" :label="'标签' + tab">标签{{ tab }}</TabPane>
<Button @click="handleTabsAdd" size="small" slot="extra">增加</Button>
</Tabs>
</template>
<script>
export default {
data () {
return {
tabs: 2
}
},
methods: {
handleTabsAdd () {
this.tabs ++;
}
}
}
</script>
不使用动画
通过设置属性 animated
为 false
可以禁用动画。
<template>
<Tabs :animated="false">
<TabPane label="标签一">标签一的内容</TabPane>
<TabPane label="标签二">标签二的内容</TabPane>
<TabPane label="标签三">标签三的内容</TabPane>
</Tabs>
</template>
<script>
export default {
}
</script>
其它样式
可以根据业务自定义 UI,需要一点额外的样式覆盖。
<style>
.demo-tabs-style1 > .ivu-tabs-card > .ivu-tabs-content {
height: 120px;
margin-top: -16px;
}
.demo-tabs-style1 > .ivu-tabs-card > .ivu-tabs-content > .ivu-tabs-tabpane {
background: #fff;
padding: 16px;
}
.demo-tabs-style1 > .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab {
border-color: transparent;
}
.demo-tabs-style1 > .ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab-active {
border-color: #fff;
}
.demo-tabs-style2 > .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab{
border-radius: 0;
background: #fff;
}
.demo-tabs-style2 > .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab-active{
border-top: 1px solid #3399ff;
}
.demo-tabs-style2 > .ivu-tabs.ivu-tabs-card > .ivu-tabs-bar .ivu-tabs-tab-active:before{
content: '';
display: block;
width: 100%;
height: 1px;
background: #3399ff;
position: absolute;
top: 0;
left: 0;
}
</style>
<template>
<Row :gutter="32">
<Col span="12" class="demo-tabs-style1" style="background: #e3e8ee;padding:16px;">
<Tabs type="card">
<TabPane label="标签一">标签一的内容</TabPane>
<TabPane label="标签二">标签二的内容</TabPane>
<TabPane label="标签三">标签三的内容</TabPane>
</Tabs>
</Col>
<Col span="12" class="demo-tabs-style2">
<Tabs type="card">
<TabPane label="标签一">标签一的内容</TabPane>
<TabPane label="标签二">标签二的内容</TabPane>
<TabPane label="标签三">标签三的内容</TabPane>
</Tabs>
</Col>
</Row>
</template>
<script>
export default {
}
</script>
API
Tabs props
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
value | 当前激活 tab 面板的 name,可以使用 v-model 双向绑定数据 | String | 默认为第一项的 name |
type | 页签的基本样式,可选值为 line 和 card | String | line |
size | 尺寸,可选值为 default 和 small ,仅在 type="line" 时有效 | String | default |
closable | 是否可以关闭页签,仅在 type="card" 时有效 | Boolean | false |
animated | 是否使用 CSS3 动画 | Boolean | true |
capture-focus | Tabs 内的表单类组件是否自动获得焦点 | Boolean | false |
before-remove | 关闭前的函数,返回 Promise 可阻止标签关闭 | Function | - |
name 3.3.1 | 当嵌套使用 Tabs,指定 name 区分层级 | String | - |
Tabs events
事件名 | 说明 | 返回值 |
---|---|---|
on-click | tab 被点击时触发 | name |
on-tab-remove | tab 被关闭时触发 | name |
Tabs slot
名称 | 说明 |
---|---|
extra | 附加内容 |
TabPane props
属性 | 说明 | 类型 | 默认值 |
---|---|---|---|
name | 用于标识当前面板,对应 value,默认为其索引值 | String | - |
label | 选项卡头显示文字,支持 Render 函数。 学习 Render 函数的内容 | String | Function | 空 |
icon | 选项卡图标 | String | - |
disabled | 是否禁用该选项卡 | Boolean | false |
closable | 是否可以关闭页签,仅在 type="card" 时有效 | Boolean | null |
tab 3.3.1 | 当嵌套使用 Tabs,设置该属性指向对应 Tabs 的 name 字段 | String | - |
index 3.3.1 | 在 TabPane 使用 v-if 时,并不会按照预先的顺序渲染,这时可设置 index,并从小到大排序(需大于 0) | Number | - |