Skip to content

TabBar 标签栏

介绍

底部导航常用场景

基础用法

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

html
<template>
  <nut-tabbar @tab-switch="tabSwitch">
     <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>
<script>
  export default{
    setup() {
      function tabSwitch(item, index) {
        console.log(item, index);
      }
      return {
        tabSwitch,
        Home,
        Category,
        Find,
        Cart,
        My
      };
    },
  }
</script>

通过名称匹配

html
<template>
 <nut-tabbar v-model="activeName" @tab-switch="tabSwitch">
      <nut-tabbar-item v-for="(item,index) in List" :name="item.name" :tab-title="item.title" :icon="item.icon"> </nut-tabbar-item>
    </nut-tabbar>
</template>
<script>
   import{ ref } from 'vue';
  export default{
    setup() {
      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',
      },
    ]
      function tabSwitch(item, index) {
        console.log(item, index);
      }
      return {
        tabSwitch,
        List,
        activeName,
      };
    },
  }
</script>

自定义图标

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

html
<template>
  <nut-tabbar @tab-switch="tabSwitch">
    <nut-tabbar-item tab-title="标签">
      <template #icon="props">
          <img v-if="props.active" :src="icon.active" />
          <img v-else :src="icon.unactive" />
        </template>
    </nut-tabbar-item>
    <nut-tabbar-item tab-title="标签">
        <template #icon="props">
          <img v-if="props.active" :src="icon.active" />
          <img v-else :src="icon.unactive" />
        </template>
    </nut-tabbar-item>
    <nut-tabbar-item tab-title="标签">
        <template #icon>
          <nut-icon name="home" />
        </template>
    </nut-tabbar-item>
  </nut-tabbar>
</template>
<script>
  export default{
    setup() {
      function tabSwitch(item, index) {
        console.log(item, index);
      }
      const icon = {
        active: 'https://img11.360buyimg.com/imagetools/jfs/t1/70423/4/20553/3652/62e74629E23ba550e/aeeed0e3b9f43ae6.png',
        unactive:'https://img13.360buyimg.com/imagetools/jfs/t1/23319/19/18329/3084/62e7c346E957c54ef/6c3e8a49e52b76f2.png',
      };
      return {
        icon,
        tabSwitch,
      };
    },
  }
</script>

自定义选中

html
<template>
  <nut-tabbar v-model="active">
    <nut-tabbar-item v-for="(item,index) in List" :tab-title="item.title" :icon="item.icon"> </nut-tabbar-item>
  </nut-tabbar>
</template>
<script>
  import{ ref } from 'vue'
 export default{
    setup() {
      const active = ref(2);
      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',
      },
    ]
      function tabSwitch(item, index) {
        console.log(item, index);
      }
      return {
        tabSwitch,
        List,
        active,
      };
    },
  }
</script>

徽标提示

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

内部使用了bardge徽标组件,可将其属性直接作用于TabbarItem props。

html
<template>
  <nut-tabbar>
      <nut-tabbar-item tab-title="首页" icon="Home" :value="11">
      </nut-tabbar-item>
      <nut-tabbar-item tab-title="分类" icon="category" :dot="true">
      </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,index) in List" :tab-title="item.title" :icon="item.icon"> </nut-tabbar-item>
    </nut-tabbar>
</template>
<script>
 export default{
    setup() {
      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',
      },
    ]
      return {
        List,
      };
    },
  }
</script>

自定义数量

html
<template>
  <nut-tabbar unactive-color="#7d7e80" active-color="#1989fa">
      <nut-tabbar-item tab-title="标签" icon="home" :value="11">
      </nut-tabbar-item>
      <nut-tabbar-item tab-title="标签" icon="home" :dot="true">
      </nut-tabbar-item>
      <nut-tabbar-item tab-title="标签" icon="home" :value="110" >
      </nut-tabbar-item>
  </nut-tabbar>
</template>

固定底部,可自由跳转

html
<template>
    <nut-tabbar bottom safe-area-inset-bottom placeholder>
      <nut-tabbar-item v-for="(item,index) in List" :tab-title="item.title" :icon="item.icon"> </nut-tabbar-item>
    </nut-tabbar>
</template>
<script>
 export default{
    setup() {
      const List=[
      {
        title:'标签',
        icon: 'home',
      },
      {
        title:'标签',
        icon: 'category',
      },
      {
        title:'标签',
        icon: 'find',

      },
      {
        title:'标签',
        icon: 'cart',
      },
      {
        title:'标签',
        icon: 'my',
      }
    ]
      return {
        List,
      };
    },
  }
</script>

API

Tabbar Props

参数说明类型默认值
v-model选中标签的索引值或者名称number0
bottom是否固定在页面底部booleanfalse
unactive-coloricon未激活的颜色string#7d7e80
active-coloricon激活的颜色string#1989fa
safe-area-inset-bottom是否开启iphone系列全面屏底部安全区适配booleanfalse
placeholder固定在底部时,是否在标签位置生成一个等高的占位元素booleanfalse

TabbarItem Props

参数说明类型默认值
tab-title标签页的标题string--
name标签名称,作为匹配的标识符string当前标签的索引值
icon标签页显示的图标名称string--

TabbarItem Slots

事件名说明参数
icon自定义图标active: boolean

Tabbar Events

事件名说明回调参数
tab-switch切换页签时触发事件点击的数据和索引值

主题定制

样式变量

组件提供了下列 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