Skip to content

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

参数说明类型默认值
modelValueTabItemValue0
tabs标签页列表数据object[]-
labelKey标题对应字段名string'label'
valueKey值对应字段名string-
duration动画时间,单位秒number0.3
lineWidth底部条宽度,默认单位pxstring | number-
lineHeight底部条宽度,默认单位pxstring | 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-height44px
--pa-tabs-bg-color#fff
--pa-tabs-item-padding0 4px
--pa-tabs-colorvar(--pa-color-black-2)
--pa-tabs-font-size14px
--pa-tabs-line-height20px
--pa-tabs-line-width40px
--pa-tabs-line-width40px
--pa-tabs-line-height3px
--pa-tabs-line-radius3rpx
--pa-tabs-color-activevar(--pa-color-black)
--pa-tabs-item-scrollable-padding0 12px