Skip to content

TabBar 标签栏

介绍

底部导航常用场景。

基础用法

如果需要在现有 Icon 的基础上使用更多图标,请参考下方 自定义图标

html
<template>
  <nut-tabbar @tab-switch="onTabSwitch">
    <nut-tabbar-item tab-title="首页" icon="home"></nut-tabbar-item>
    <nut-tabbar-item tab-title="分类" icon="category"></nut-tabbar-item>
    <nut-tabbar-item tab-title="发现" icon="find"></nut-tabbar-item>
    <nut-tabbar-item tab-title="购物车" icon="cart"></nut-tabbar-item>
    <nut-tabbar-item tab-title="我的" icon="my"></nut-tabbar-item>
  </nut-tabbar>
</template>
ts
function onTabSwitch(item: any, index: number) {
  console.log("tab-switch", item, index);
}

通过名称匹配

html
<template>
  <nut-tabbar v-model="activeName">
    <nut-tabbar-item
      v-for="(item) in list"
      :key="item.name"
      :name="item.name"
      :tab-title="item.title"
      :icon="item.icon"
    ></nut-tabbar-item>
  </nut-tabbar>
</template>
ts
const activeName = ref("category");

const list = [
  { title: "标签", icon: "home", name: "home" },
  { title: "标签", icon: "category", name: "category" },
  { title: "标签", icon: "find", name: "find" },
  { title: "标签", icon: "cart", name: "cart" },
  { title: "标签", icon: "my", name: "my" }
];

自定义图标

通过 icon 插槽自定义图标,可以通过 active 判断标签是否选中。

html
<template>
  <nut-tabbar>
    <nut-tabbar-item tab-title="首页">
      <template #icon="{ active }">
        <image
          v-if="active"
          src="https://img11.360buyimg.com/imagetools/jfs/t1/70423/4/20553/3652/62e74629E23ba550e/aeeed0e3b9f43ae6.png"
        ></image>
        <image
          v-else
          src="https://img13.360buyimg.com/imagetools/jfs/t1/23319/19/18329/3084/62e7c346E957c54ef/6c3e8a49e52b76f2.png"
        ></image>
      </template>
    </nut-tabbar-item>

    <nut-tabbar-item tab-title="我的">
      <template #icon>
        <nut-icon name="my"></nut-icon>
      </template>
    </nut-tabbar-item>
  </nut-tabbar>
</template>

通过索引选中

html
<template>
  <nut-tabbar v-model="active">
    <nut-tabbar-item
      v-for="(item) in list"
      :tab-title="item.title"
      :icon="item.icon"
    ></nut-tabbar-item>
  </nut-tabbar>
</template>
ts
const active = ref(2);

const list = [
  { title: "标签", icon: "home" },
  { title: "标签", icon: "category" },
  { title: "标签", icon: "find" },
  { title: "标签", icon: "cart" },
  { title: "标签", icon: "my" }
];

徽标提示

设置 dot 属性后,会在图标右上角展示一个小红点;设置 value 属性后,会在图标右上角展示相应的徽标。

html
<template>
  <nut-tabbar>
    <nut-tabbar-item tab-title="首页" icon="home" :value="11"></nut-tabbar-item>
    <nut-tabbar-item tab-title="分类" icon="category" dot></nut-tabbar-item>
    <nut-tabbar-item tab-title="发现" icon="find" :value="110"></nut-tabbar-item>
    <nut-tabbar-item tab-title="购物车" icon="cart"></nut-tabbar-item>
    <nut-tabbar-item tab-title="我的" icon="my"></nut-tabbar-item>
  </nut-tabbar>
</template>

自定义颜色

html
<template>
  <nut-tabbar unactive-color="#7d7e80" active-color="#1989fa">
    <nut-tabbar-item
      v-for="(item) in list"
      :tab-title="item.title"
      :icon="item.icon"
    ></nut-tabbar-item>
  </nut-tabbar>
</template>

固定至底部

html
<template>
  <nut-tabbar bottom safe-area-inset-bottom placeholder>
    <nut-tabbar-item
      v-for="(item) in list"
      :tab-title="item.title"
      :icon="item.icon"
    ></nut-tabbar-item>
  </nut-tabbar>
</template>

API

Tabbar Props

参数说明类型可选值默认值
v-model选中标签的索引值或者名称number / string-0
bottom是否固定在页面底部boolean-false
unactive-color图标未激活的颜色string-#7d7e80
active-color图标激活的颜色string-#1989fa
safe-area-inset-bottom是否开启 iphone 系列全面屏底部安全区适配boolean-false
placeholder固定在底部时,是否在标签位置生成一个等高的占位元素boolean-false
controlled 1.9.1是否启用受控模式,启用后选中项始终受 model-value 控制boolean-false

Tabbar Events

事件名说明类型
tab-switch切换页签时触发事件(item: any, index: number) => void

TabbarItem Props

参数说明类型可选值默认值
tab-title标签页的标题string--
name标签名称,作为匹配的标识符string--
icon图标名称string--

TabbarItem Slots

名称说明类型
icon自定义图标{ active: boolean }

主题定制

样式变量

组件提供了下列 CSS 变量,可用于自定义样式,使用方法请参考 ConfigProvider 组件

名称默认值
--nut-tabbar-active-colorvar(--nut-primary-color)
--nut-tabbar-unactive-colorvar(--nut-primary-color)
--nut-tabbar-border-top1px solid #eee
--nut-tabbar-border-bottom1px solid #eee
--nut-tabbar-box-shadownone
--nut-tabbar-item-text-font-sizevar(--nut-font-size-0)
--nut-tabbar-item-text-line-heightinitial
--nut-tabbar-height50px
--nut-tabbar-word-margin-topauto

MIT Licensed