Tabs
基础用法
html
<pa-tabs v-model="tabActive">
<pa-tab-pane title="标签1">内容1</pa-tab-pane>
<pa-tab-pane title="标签2">内容2</pa-tab-pane>
<pa-tab-pane title="标签3">内容3</pa-tab-pane>
<pa-tab-pane title="标签4">内容4</pa-tab-pane>
</pa-tabs>
ts
import { ref } from 'vue'
const tabActive = ref<number>(0)
通过名称匹配
html
<pa-tabs v-model="tabActive">
<pa-tab-pane title="标签1" name="a">内容1</pa-tab-pane>
<pa-tab-pane title="标签2" name="b">内容2</pa-tab-pane>
<pa-tab-pane title="标签3" name="c">内容3</pa-tab-pane>
</pa-tabs>
ts
import { ref } from 'vue'
const tabActive = ref<number>(0)
标签栏滚动
html
<pa-tabs v-model="tabActive" scrollable>
<pa-tab-pane title="标签1">内容1</pa-tab-pane>
<pa-tab-pane title="标签2">内容2</pa-tab-pane>
<pa-tab-pane title="标签3">内容3</pa-tab-pane>
<pa-tab-pane title="标签4">内容4</pa-tab-pane>
<pa-tab-pane title="标签5">内容5</pa-tab-pane>
<pa-tab-pane title="标签6">内容6</pa-tab-pane>
<pa-tab-pane title="标签7">内容7</pa-tab-pane>
<pa-tab-pane title="标签8">内容8</pa-tab-pane>
</pa-tabs>
ts
import { ref } from 'vue'
const tabActive = ref<number>(0)
禁用标签
html
<pa-tabs v-model="tabActive">
<pa-tab-pane title="标签1">内容1</pa-tab-pane>
<pa-tab-pane title="标签2" disabled>内容2</pa-tab-pane>
<pa-tab-pane title="标签3">内容3</pa-tab-pane>
</pa-tabs>
ts
import { ref } from 'vue'
const tabActive = ref<number>(0)
点击事件
html
<pa-tabs v-model="tabActive" @change="onChange">
<pa-tab-pane title="标签1">内容1</pa-tab-pane>
<pa-tab-pane title="标签2">内容2</pa-tab-pane>
</pa-tabs>
ts
import { ref } from 'vue'
import type { TabItem } from '../..'
const tabActive = ref<number>(0)
const onChange = (item: TabItem) => {
// 如果是使用tabs传入的方式,item为tabs里对应选中的对象
uni.showToast({
title: item.title,
icon: 'none',
})
}
切换动画
html
<pa-tabs v-model="tabActive" animated>
<pa-tab-pane title="标签1">内容1</pa-tab-pane>
<pa-tab-pane title="标签2">内容2</pa-tab-pane>
<pa-tab-pane title="标签3">内容3</pa-tab-pane>
<pa-tab-pane title="标签4">内容4</pa-tab-pane>
</pa-tabs>
ts
import { ref } from 'vue'
const tabActive = ref<number>(0)
tabs传入方式 - 基础用法
html
<pa-tabs v-model="tabActive" :tabs="getData(3)" />
ts
import { ref } from 'vue'
const tabActive = ref<number>(0)
const getData = (count: number) => {
return new Array(count).fill(0).map((_item, index) => {
return {
title: `自定义${index}`,
label: `标签${index}`,
name: index,
value: index,
}
})
}
tabs传入方式 - 自定义索引值
html
<pa-tabs
v-model="tabActive"
:tabs="getData(3)"
label-key="label"
value-key="value"
@change="onChange"
/>
ts
import { ref } from 'vue'
interface CustomTabItem {
title: string
label: string
value: number
name: number
}
const tabActive = ref<number>(0)
const getData = (count: number) => {
return new Array(count).fill(0).map((_item, index) => {
return {
title: `自定义${index}`,
label: `标签${index}`,
name: index,
value: index,
}
})
}
const onChange = (item: CustomTabItem) => {
uni.showToast({
title: item.label,
icon: 'none',
})
}
Tabs Props
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
modelValue | 值 | TabItemValue | 0 |
tabs | 标签页列表数据 | object[] | - |
labelKey | 标题对应字段名 | string | 'label' |
valueKey | 值对应字段名 | string | - |
duration | 动画时间,单位秒 | number | 0.3 |
lineWidth | 底部条宽度,默认单位px | string | number | - |
lineHeight | 底部条宽度,默认单位px | string | number | - |
scrollable | 是否滚动 | boolean | - |
animated | 是否开启切换标签内容时的转场动画 | boolean | - |
shrink | 是否开启左侧收缩布局 | boolean | - |
TabPane Props
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
name | 标签名称,作为匹配的标识符 | string | number | - |
title | 标题 | string | '' |
disabled | 是否禁用标签 | boolean | - |
Tabs Event
事件名 | 参数 |
---|---|
update:modelValue | (current: TabItemValue) |
change | (item: any) |
click | (item: any) |
TabPane Event
事件名 | 参数 |
---|
Tabs Slot
名称 | 说明 |
---|---|
default | - |
TabPane Slot
名称 | 说明 |
---|---|
default | - |
样式变量
名称 | 默认值 |
---|---|
--pa-tabs-height | 44px |
--pa-tabs-bg-color | #fff |
--pa-tabs-item-padding | 0 4px |
--pa-tabs-color | var(--pa-color-black-2) |
--pa-tabs-font-size | 14px |
--pa-tabs-line-height | 20px |
--pa-tabs-line-width | 40px |
--pa-tabs-line-width | 40px |
--pa-tabs-line-height | 3px |
--pa-tabs-line-radius | 3rpx |
--pa-tabs-color-active | var(--pa-color-black) |
--pa-tabs-item-scrollable-padding | 0 12px |