# Tabs 标签栏
标签栏常用于页面内部不同业务区域的切换控制
提示
items
标签栏数组,默认获取配置的keyField: 'id'
,displayField: 'text'
[
{ id: 'product', text: '宝贝' },
{ id: 'evaluation', text: '评价' },
{ id: 'detail', text: '详情' }
]
1
2
3
4
5
2
3
4
5
设置keyField: 'key'
,displayField: 'value'
,那么需要传递的items数据如下:
[
{ key: 'product', value: '宝贝' },
{ key: 'evaluation', value: '评价' },
{ key: 'detail', value: '详情' }
]
1
2
3
4
5
2
3
4
5
# 平台差异说明
App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ |
# 示例
# 基本用法
items
标签栏数组
v-model
绑定激活的标签栏(数组中的一项)
keyField: 'id'
, 选项id字段,默认为id
displayField: 'text'
, 选项显示字段,默认为text
disabledField: 'disabled'
, 禁用字段,默认为disabled
### 固定sliderBar宽度
可通过`slider-bar-width`设置标签栏底部滑动条宽度
```vue
<template>
<pi-tabs
v-model="sliderBarWidth.currentItem"
:items="sliderBarWidth.tabItems"
slider-bar-width="60"
/>
</template>
<script>
export default {
data(){
return {
sliderBarWidth: {
currentItem: { id: 'product' },
tabItems: [
{ id: 'product', text: '宝贝' },
{ id: 'evaluation', text: '评价' },
{ id: 'detail', text: '详情' },
{ id: 'discover', text: '发现好物' },
{ id: 'recommend', text: '推荐我的好宝贝' },
{ id: 'share', text: '分享' }
]
}
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 显示滚动槽
可通过show-slider-bar-guide
设置是否显示滚动槽
<template>
<pi-tabs
v-model="showSliderBarGuide.currentItem"
:items="showSliderBarGuide.tabItems"
slider-bar-width="60"
active-color="blue"
show-slider-bar-guide
/>
</template>
<script>
export default {
data(){
return {
showSliderBarGuide: {
currentItem: { id: 'detail' },
tabItems: [
{ id: 'product', text: '宝贝' },
{ id: 'evaluation', text: '评价' },
{ id: 'detail', text: '详情' },
{ id: 'discover', text: '发现好物' },
{ id: 'recommend', text: '推荐我的好宝贝' },
{ id: 'share', text: '分享' }
]
}
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 标签均分宽度
可通过stretch
将标签均匀分布在屏幕的宽度范围内
<template>
<pi-tabs
v-model="stretch.currentItem"
:items="stretch.tabItems"
stretch
active-color="green"
/>
</template>
<script>
export default {
data(){
return {
stretch: {
currentItem: { id: 'c' },
tabItems: [
{ id: 'a', text: 'A' },
{ id: 'b', text: 'B' },
{ id: 'c', text: 'C' },
{ id: 'd', text: 'D' }
]
}
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 自定义样式
item-style
设置选项样式
active-text-color
设置文字激活颜色
active-item-style
设置激活选项样式
<template>
<pi-tabs
v-model="itemStyle.currentItem"
:items="itemStyle.tabItems"
:item-style="{ color: '#333333', fontWeight: 600 }"
stretch
:show-slider-bar="false"
active-text-color="#ffffff"
:active-item-style="{
backgroundColor: '#ff508a',
borderRadius: '12rpx'
}"
@change="handleChangeItem"
/>
</template>
<script>
export default {
data(){
return {
itemStyle: {
currentItem: { id: 'c' },
tabItems: [
{ id: 'a', text: 'A' },
{ id: 'b', text: 'B' },
{ id: 'c', text: 'C' },
{ id: 'd', text: 'D' },
{ id: 'e', text: 'E' }
]
},
}
},
methods: {
handleChangeItem(val) {
console.log('切换到' + val.text)
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 自定义激活标签
<template>
<pi-tabs
v-model="activeItemStyle.currentItem"
:items="activeItemStyle.tabItems"
slider-bar-width="60"
active-text-color="#222222"
active-color="#ff508a"
:show-slider-bar-guide="false"
:active-item-style="{
fontSize: '48rpx',
fontWeight: '600',
color: '#ff508a'
}"
:item-style="{
fontSize: '32rpx',
color: '#666666'
}"
/>
</template>
<script>
export default {
data(){
return {
activeItemStyle: {
currentItem: { id: 'c' },
tabItems: [
{ id: 'a', text: 'A' },
{ id: 'b', text: 'B' },
{ id: 'c', text: 'C' },
{ id: 'd', text: 'D' },
{ id: 'e', text: 'E' }
]
},
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 自定义slot
注意
由于微信小程序平台兼容性,已知问题如下:
- uniapp工程
manifest.json
必须在mp-weixin
下声明"scopedSlotsCompiler": "legacy"
,否则无法使用自定义slot - slot中无法绑定
@tap
事件 - slot中只能使用
item
index
active
等data,无法获取父组件的数据
<template>
<pi-tabs
v-model="customSlot.currentItem"
:items="customSlot.tabItems"
show-item-split-line
>
<view slot="item" slot-scope="{ item }">
<view class="pi-align-center">
<view>{{ item.text }}</view>
<pi-badge color="#5a7dff" :content="item.num" class="pi-mg-left-6" />
</view>
</view>
</pi-tabs>
</template>
<script>
export default {
data(){
return {
customSlot: {
currentItem: { id: '5' },
tabItems: [
{ id: '1', text: '全部', num: 0 },
{ id: '2', text: '家电', num: 100 },
{ id: '5', text: '奢侈品', num: 30 },
{ id: '3', text: '家具', num: 0 },
{ id: '4', text: '服装', num: 0 },
{ id: '6', text: '其他', num: 0 }
]
}
}
}
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# API
# Props
# Basic Options
名称 | 描述 | 类型 | 必选 | 默认值 |
---|---|---|---|---|
value | 初始值 | — | false | - |
customStyle | 自定义样式,对象形式 | Object | false | {} |
customClass | 自定义样式类,字符串形式 | String | false | '' |
items | 选项列表,默认 | Array | false | [] |
keyField | 选项id字段 | String | false | 'id' |
displayField | 选项显示字段 | String | false | 'text' |
disabledField | 选项禁用字段 | String | false | 'disabled' |
itemPadding | 选项两边的padding,单位rpx | String /Number | false | 30 |
stretch | 标签是否自动撑开 | Boolean | false | false |
duration | 动画执行时间(毫秒) | String /Number | false | 300 |
activeColor | 激活颜色(不设置,默认主题色) | String | false | '' |
activeTextColor | 文字激活颜色(不设置,默认主题色) | String | false | '' |
showItemSplitLine | 是否显示每项分割线 | Boolean | false | false |
showSliderBar | 是否显示底部的滑块 | Boolean | false | true |
showSliderBarGuide | 是否显示底部滑块导轨 | Boolean | false | false |
sliderBarWidth | 底部的滑块的宽度,单位rpx(如果不设置,默认按照当前item文字的宽度去适配) | String /Number | false | '' |
sliderBarHeight | 底部的滑块的高度,单位rpx | String /Number | false | 4 |
sliderBarRadius | 底部的滑块的圆角,单位rpx | String /Number | false | 4 |
height | 导航栏的高度,单位rpx | String /Number | false | 80 |
itemStyle | 选项样式 | Object | false | {} |
sliderBarStyle | 底部滑块样式 | Object | false | {} |
activeItemStyle | 激活选项样式 | Object | false | {} |
#
# Events
方法名称 | 说明 | 参数 |
---|---|---|
beforeChange | tabs切换前事件 | 当前激活item |
change | tabs切换 | 当前激活item |