Vant的Tabbar标签栏引入自定义图标方式

要在Vant的Tabbar标签栏中引入自定义图标,必须经过以下步骤:

1. 准备图标资源

首先需要准备自己所需要使用的图标的资源。可以使用现有的iconfont字体图标库,也可以将自己的图标转换成字体图标库。请注意,如果使用的是自己的图标,请确保它们的尺寸是一致的。可以使用在线工具将图标转换成相应的字体格式,例如icomoon

2. 安装Vant

安装Vant,可以使用npm或yarn来安装。

npm install vant -S

3. 引入Vant组件

在需要使用Tabbar标签栏的页面中引入Tabbar组件。

<template>
  <div>
    <van-tabs v-model="active">
      <van-tab v-for="(item, index) in tabs" :key="index" :dot="item.dot" :badge="item.badge" :name="item.name">
        <template #icon>
          <svg-icon :icon-class="item.icon" />
        </template>
        {{ item.title }}
      </van-tab>
    </van-tabs>
  </div>
</template>

<script>
import { Tab, Tabs } from 'vant';
import SvgIcon from '@/components/SvgIcon';

export default {
  name: 'CustomTabbar',
  components: {
    VanTab: Tab,
    VanTabs: Tabs,
    SvgIcon
  },
  data() {
    return {
      active: 'home',
      tabs: [
        {
          name: 'home',
          title: '首页',
          icon: 'home-o'
        },
        {
          name: 'cart',
          title: '购物车',
          icon: 'cart-o',
          dot: true
        },
        {
          name: 'user',
          title: '我的',
          icon: 'user-o',
          badge: 5
        }
      ]
    };
  }
};
</script>

这里我们同时引入了自己的SvgIcon组件,用于处理自定义图标。

4. 写CSS

首先在public/index.html中引入字体图标库css文件。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>My App</title>
    <link href="//at.alicdn.com/t/font_xxxxxxx.css" rel="stylesheet">
    <!-- ... -->
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

然后在App.vue中添加对应的样式,例如:

<style scoped>
.vant-tabbar__icon svg {
  height: 22px;
  width: 22px;
}

.vant-tabbar__text {
  font-size: 13px;
}

.vant-tab {
  color: #666;
}

.vant-tab--active {
  color: #f56c6c;
}
</style>

5. 编写SvgIcon组件

我们的自定义图标都是以SVG格式存在,第一步需要将SVG转成Vue组件格式,因此需要在项目中定义一个可以接收图标名称并输出Vue组件的组件。

<template>
  <svg class="icon" aria-hidden="true">
    <use :xlink:href="`#${iconName}`" />
  </svg>
</template>

<script>
export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      required: true,
      type: String
    }
  },
  computed: {
    iconName() {
      return `icon-${this.iconClass}`;
    }
  }
};
</script>

<style scoped>
  .icon {
    width: 1em;
    height: 1em;
    vertical-align: -0.15em;
    fill: currentColor;
    overflow: hidden;
  }
</style>

这个组件接收一个iconClass属性,表示图标名称。组件内部使用use标签引用了该名称对应的SVG,并将其渲染出来。

6. 使用自定义图标

在Tab组件标签内使用自定义的图标:

<template>
  <van-tabs v-model="active">
    <van-tab v-for="(item, index) in tabs" :key="index" :dot="item.dot" :badge="item.badge" :name="item.name">
      <template #icon>
        <svg-icon :icon-class="item.icon" />
      </template>
      {{ item.title }}
    </van-tab>
  </van-tabs>
</template>

<script>
import { Tab, Tabs } from 'vant';
import SvgIcon from '@/components/SvgIcon';

export default {
  name: 'CustomTabbar',
  components: {
    VanTab: Tab,
    VanTabs: Tabs,
    SvgIcon
  },
  data() {
    return {
      active: 'home',
      tabs: [
        {
          name: 'home',
          title: '首页',
          icon: 'home-o'
        },
        {
          name: 'cart',
          title: '购物车',
          icon: 'cart-o',
          dot: true
        },
        {
          name: 'user',
          title: '我的',
          icon: 'user-o',
          badge: 5
        }
      ]
    };
  }
};
</script>

这里我们在Tab组件的icon插槽内使用自己编写的SvgIcon组件,并传入该图标对应的类名,例如home-o

到这里,自定义图标已经成功引入到了Vant的Tabbar标签栏组件中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vant的Tabbar标签栏引入自定义图标方式 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue路由切换和Axios接口取消重复请求详解

    Vue路由切换和Axios接口取消重复请求详解 Vue路由切换 Vue路由切换指的是在Vue单页应用中,通过使用Vue Router实现不同页面之间的切换。 首先需要在项目中安装Vue Router。 npm install vue-router –save 在Vue项目的入口文件中引入Vue Router,并定义路由 import Vue from ‘v…

    Vue 2023年5月28日
    00
  • 简单设置el-date-picker的默认当前时间问题

    下面是详细讲解如何设置 el-date-picker 的默认当前时间的攻略: 1.需求分析 当我们使用 el-date-picker 来选择日期时,默认展示的日期为当前日期,这在大部分场景下都是符合要求的。但有时候我们需要默认选中其他日期,比如一个从某一具体日期开始的查询页面。 在这种情况下,我们就需要设置 el-date-picker 的默认当前时间,让它…

    Vue 2023年5月29日
    00
  • vue使用Vue.extend方法仿写个loading加载中效果实例

    下面是详细讲解“vue使用Vue.extend方法仿写个loading加载中效果实例”的完整攻略: 1. Vue.extend方法简介 Vue.extend是Vue.js中一个全局API,它接受一个参数对象并返回一个新的组件构造函数,这个构造函数可以被像任何其它组件一样被实例化。 其主要作用是定义可复用的组件模板,这些模板可以在后面使用到。 2. 实现过程 …

    Vue 2023年5月29日
    00
  • vue项目实现图片上传功能

    下面是实现Vue项目图片上传功能的完整攻略: 准备工作 在开始实现图片上传功能之前,我们需要先进行几项准备工作。首先,需要确定你使用的Vue版本是否支持vue-cli3,如果不支持,需要先安装一个支持vue-cli3的Vue版本。其次,需要安装一个Vue插件——vue-uploader,以便我们更方便地完成图片上传功能开发。 安装Vue-cli3 Vue-c…

    Vue 2023年5月28日
    00
  • vue.js实现表格合并示例代码

    以下是详细讲解”Vue.js实现表格合并示例代码”的完整攻略: 1. 准备工作 首先,在进行Vue.js表格合并之前,必须先从Vue.js官网或者其它地方下载并安装Vue.js。之后,我们需要准备一个表格的数据,同时要考虑到哪些列需要进行表格合并。接下来我们需要将数据和需要合并的列传递给Vue组件。 2. 实现方法 在Vue组件的执行流程中,我们首先需要在&…

    Vue 2023年5月27日
    00
  • Vue2实现组件props双向绑定

    下面我将详细讲解如何在Vue2中实现组件props的双向绑定。 1. Vue2中props的单向绑定 Vue2中的props是单向绑定的,即父组件可以向子组件传递数据,但是子组件不能直接修改父组件传递的props。在子组件中默认情况下只能读取父组件传递的props值,如果想要修改这些值,需要通过事件的形式在子组件中触发父组件传递的方法来实现。 下面是一个示例…

    Vue 2023年5月28日
    00
  • vue select change事件如何传递自定义参数

    当Vue的select元素的值发生变化时,Vue会通过change事件自动触发对应的事件处理函数。如果我们希望在事件处理函数中传递一些自定义参数,就需要采用一些特殊的方式来实现。 以下是两种示例说明: 示例1 HTML代码 <select v-model="selected" @change="handleChange(‘…

    Vue 2023年5月28日
    00
  • vue中的for循环以及自定义指令解读

    下面我会详细地讲解一下 “Vue中的For循环以及自定义指令解读”。 Vue中的For循环 Vue提供了v-for指令,我们可以通过它循环遍历数据列表,同时将每个元素渲染成一个view。 v-for指令可以使用 in 或 of 运算符,具体取决于对象或数组的语法。这里我们以数组为例,展示v-for如何工作。 基本用法 v-for可以通过以下方式,遍历数组: …

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部