vue封装TabBar组件的完整步骤记录

下面详细讲解“Vue封装TabBar组件的完整步骤记录”的攻略。

步骤一: 创建项目

首先,在终端里创建Vue项目,可以使用Vue官方的脚手架Vue CLI来快速创建项目。在命令行中执行以下命令:

vue create my-project

“my-project”是你项目的名称,根据实际情况进行替换。

步骤二:创建组件

在项目的组件目录中(一般是/src/components/),创建一个名为TabBar.vue的组件,在该组件中实现TabBar组件的逻辑。

<template>
  <div class="tab-bar">
    <div
      v-for="(item, index) in items"
      :key="index"
      :class="{ active: activeIndex === index }"
      class="tab-item"
      @click="handleItemClick(index)"
    >
      {{ item.label }}
    </div>
  </div>
</template>

<script>
export default {
  name: 'TabBar',
  props: {
    items: {
      type: Array,
      default: () => []
    },
    activeIndex: {
      type: Number,
      default: 0
    }
  },
  methods: {
    handleItemClick(index) {
      this.$emit('change', index)
    }
  }
}
</script>

<style>
.tab-bar {
  display: flex;
  justify-content: space-between;
}

.tab-item {
  flex: 1;
  text-align: center;
  padding: 10px 0;
  font-size: 14px;
  color: #333;
  cursor: pointer;
}

.tab-item.active {
  color: #007aff;
}
</style>

以上代码实现了一个简单的TabBar组件,可以接受一个items属性表示TabBar中的各个项,activeIndex表示当前选中的项。点击TabBar的某个项会触发一个change事件,通过$emit把选中的项的索引值传递出去。

步骤三:使用组件

在项目中使用我们刚才实现的TabBar组件。可以在App.vue(或其他需要TabBar的组件页面)中引入组件,并设置好TabBar的每一项的label和对应的路由地址。示例如下:

<template>
  <div id="app">
    <tab-bar :items="items" :active-index="activeIndex" @change="handleTabChange" />
    <router-view />
  </div>
</template>

<script>
import TabBar from './components/TabBar.vue'

export default {
  name: 'App',
  components: {
    TabBar
  },
  data() {
    return {
      activeIndex: 0,
      items: [
        { label: '首页', path: '/' },
        { label: '分类', path: '/category' },
        { label: '购物车', path: '/cart' },
        { label: '我的', path: '/me' }
      ]
    }
  },
  methods: {
    handleTabChange(index) {
      this.activeIndex = index
      this.$router.push(this.items[index].path)
    }
  }
}
</script>

在以上代码中,我们使用了Vue Router来实现TabBar组件的导航功能,当TabBar中某一项被选中时,会自动跳转到对应的路由地址。当然,你也可以根据自己的需求,选择不同的导航方式。

示例一:移动端TabBar

以下是一个移动端TabBar的示例:

<template>
  <div class="tab-bar">
    <div 
        v-for="(item, index) in items" 
        :key="index" 
        class="tab-item"
        :class="{'active': activeIndex === index}"
        @click="$emit('change', index)"
      >
        <div :class="getIconClass(item.icon)">
          <i :class="item.icon"></i>
        </div>
        <div class="tab-label">{{item.title}}</div>
      </div>
  </div>
</template>

<script>
export default {
  name: 'TabBar',
  props: {
    items: {
      type: Array,
      default: () => []
    },
    activeIndex: {
      type: Number,
      default: 0
    }
  },
  methods: {
    getIconClass(icon) {
      return ['tab-icon', icon]
    }
  }
}
</script>

<style scoped>
.tab-bar {
  display: flex;
  position: fixed;
  bottom: 0;
  height: 50px;
  width: 100%;
  background-color: #fff;
  border-top: 1px solid #ddd;
}

.tab-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  font-size: 12px;
  color: #666;
  cursor: pointer;
  transition: all .3s;
}

.tab-item.active {
  color: #007aff;
}

.tab-icon {
  display: flex;
  justify-content: center;
  align-items: center;
  border-radius: 50%;
  width: 22px;
  height: 22px;
}

.tab-label {
  margin-top: 3px;
}
</style>

在以上代码中,我们使用了getIconClass方法来获取每一个Tab项的icon类名,添加到样式中来显示对应的图标。同时,我们使用了CSS3的transition属性,使TabBar的切换更加平滑。列表项的样式可以根据实际需求自己进行更改。

示例二:PC端TabBar

以下是一个PC端的TabBar示例:

<template>
  <div class="tab-bar">
    <ul>
      <li 
          v-for="(item, index) in items" 
          :key="index" 
          class="tab-item"
          :class="{'active': activeIndex === index}"
          @click="$emit('change', index)"
        >
          {{ item.title }}
        </li>
    </ul>
  </div>
</template>

<script>
export default {
  name: 'TabBar',
  props: {
    items: {
      type: Array,
      default: () => []
    },
    activeIndex: {
      type: Number,
      default: 0
    }
  }
}
</script>

<style scoped>
.tab-bar {
  height: 60px;
  background-color: #f2f2f2;
  border-top: 1px solid #ddd;
}

ul {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
}

.tab-item {
  margin: 0 20px;
  font-size: 16px;
  color: #666;
  cursor: pointer;
  transition: all .3s;
}

.tab-item.active {
  color: #007aff;
}
</style>

在以上代码中,我们使用了一个ul列表来展示TabBar的各项,每一项的样式可以自己根据实际需求进行更改。

至此,我们已经完成了一个基本的TabBar组件的封装,可以适用于不同场景的展现。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue封装TabBar组件的完整步骤记录 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 有关数据库SQL递归查询在不同数据库中的实现方法

    SQL递归查询是指一个查询语句可以通过不断地自关联查询来完成一定程度的递归操作。这种查询方式在许多应用场景中经常使用。在不同的数据库中,SQL递归查询的实现方式也存在一些异同。下面我们就来详细讲解一下有关数据库SQL递归查询在不同数据库中的实现方法,具体内容如下: MySQL 实现递归查询 在 MySQL 中,可以通过使用 WITH RECURSIVE 或使…

    other 2023年6月27日
    00
  • epplus使用的简单介绍

    epplus使用的简单介绍 如果你需要在C#程序中操作Excel文件,那么在.NET平台中,你可以使用EPPlus这个库。EPPlus是一款开源的库,可以处理Excel2007以上版本的文件,方便快捷,使用简单。 安装EPPlus 在Visual Studio中安装Epplus库可以使用NuGet Package Manager。NuGet时.NET的软件包…

    其他 2023年3月28日
    00
  • spring IOC控制反转原理详解

    Spring IOC控制反转原理详解 什么是IOC? IOC(Inversion Of Control,即“控制反转”)是一种设计思想,它最早应用于框架的设计。它的基本思想是:将你设计好的对象交给容器,就是有了“控制权的转移”,由容器去帮你创建和管理这些对象。 通常是在框架或类库中使用IOC。在这种情况下,框架或类库决定什么时候实例化何种类,并且负责为类的属…

    other 2023年6月27日
    00
  • Python 之 装饰器的写法

    下面是“Python之装饰器的写法的完整攻略”,包括基本原理、实现方法和两个示例说明。 基本原理 装饰器是 Python 中一种常用的语法结构,用于在不修改原函数代码的情况下,为函数添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。在 Python 中,装饰器通常用于实现日志记录、性能分析、权限控制等功能。 实现方法 实现装…

    other 2023年5月5日
    00
  • Oracle安装TNS_ADMIN环境变量设置参考

    下面是Oracle安装TNS_ADMIN环境变量设置的完整攻略: 什么是TNS_ADMIN环境变量? TNS_ADMIN环境变量是Oracle数据库安装过程中需要配置的一个环境变量,它的作用是指定tnsnames.ora文件所在的目录。tnsnames.ora文件是一个配置文件,用于指定数据库连接信息。当客户端需要连接数据库时,它会读取tnsnames.or…

    other 2023年6月27日
    00
  • mysql之sysbench1.0.3安装与系统压力测试

    MySQL之sysbench1.0.3安装与系统压力测试 简介 sysbench是一个用于评估系统性能的开源基准测试工具,其中内置了对MySQL数据库系统的压力测试模块。在本篇文章中,我们将介绍如何通过安装sysbench1.0.3来进行系统压力测试,并且以MySQL作为数据库系统进行测试。 安装sysbench1.0.3 在进行系统压力测试之前,我们需要安…

    其他 2023年3月28日
    00
  • iphone怎么大写字母 图文教你iPhone连续输入大写字母

    iPhone连续输入大写字母攻略 在iPhone上,你可以使用连续输入的方式输入大写字母,这样可以提高输入效率。下面是详细的攻略,包含了两个示例说明。 步骤一:打开键盘 首先,确保你的iPhone处于解锁状态。然后,打开任何需要输入大写字母的应用程序,例如消息、邮件或者备忘录。 步骤二:切换到大写字母模式 在键盘的底部,你会看到一个小箭头或者一个小球形图标。…

    other 2023年8月18日
    00
  • jrebel插件安装配置与破解激活(多方案)详细教程

    JRebel插件安装配置与破解激活(多方案)详细教程 JRebel是一款极其常用的Java热部署插件,可以显著提高开发效率。不过,该插件需要购买才能正常使用。下面是JRebel插件安装、配置和破解激活的多种方案。 方案一:使用激活码 首先从官网下载最新版的JRebel插件,解压到本地。 打开解压后的文件夹,将其中的jrebel.jar和lib文件夹复制到你的…

    其他 2023年3月29日
    00
合作推广
合作推广
分享本页
返回顶部