Vue封装一个Tabbar组件 带组件路由跳转方式

下面就来详细讲解如何用Vue封装一个Tabbar组件并带有组件路由的跳转方式。

一、准备工作

在开始编写代码之前,需要先安装Vue以及Vue Router等组件。具体步骤如下:

  1. 安装Vue.js
npm install vue -S
  1. 安装Vue Router
npm install vue-router -S

二、编写Tabbar组件

下面我们开始编写Tabbar组件,首先在src/components文件夹下创建一个Tabbar.vue文件。

<template>
  <div>
    <router-view></router-view>
    <div class="tab-bar">
      <div class="tab-item" v-for="(item, index) in tabItems" :key="index" :class="{active: activeIndex === index}" @click="goto(index)">
        <img :src="item.icon" alt="">
        <div>{{item.title}}</div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'Tabbar',
  data() {
    return {
      activeIndex: 0,
      tabItems: [
        {
          title: '首页',
          icon: require('@/assets/images/tabBar/home.png'),
          path: '/'
        },
        {
          title: '商品',
          icon: require('@/assets/images/tabBar/shop.png'),
          path: '/shop'
        },
        {
          title: '购物车',
          icon: require('@/assets/images/tabBar/cart.png'),
          path: '/cart'
        },
        {
          title: '我的',
          icon: require('@/assets/images/tabBar/mine.png'),
          path: '/mine'
        }
      ]
    }
  },
  methods: {
    goto(index) {
      if (index !== this.activeIndex) {
        this.activeIndex = index
        this.$router.push(this.tabItems[index].path)
      }
    }
  }
}
</script>

<style scoped>
.tab-bar {
  display: flex;
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 50px;
  background-color: #fff;
  border-top: 1px solid #ccc;
  box-shadow: 0 0 10px rgba(0, 0, 0, .1);
  z-index: 999;
}
.tab-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: #999;
}
.tab-item.active {
  color: #00bcd4;
}
.tab-item img {
  width: 22px;
  height: 22px;
  margin-bottom: 2px;
}
</style>

在Tabbar.vue文件中,我们定义了一个包含路由视图和底部Tabbar的组件。底部Tabbar显示了四个Tab选项卡,每个Tab选项卡包含一个标题、一个图标和一个路径。 点击Tab选项卡时,我们将更新活动选项卡的索引,并使用Vue Router将浏览器URL更新为相应的路径。

此外,还定义了一些CSS样式,使其在浏览器中显示为底部功能区。

三、配置Vue Router

在我们可以使用Vue Router导航到不同的路由之前,我们需要先配置Vue Router。打开src/router/index.js文件,在里面配置Vue Router路由。

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/Home.vue'

Vue.use(Router)

const router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/shop',
      name: 'Shop',
      component: () => import('@/views/Shop.vue')
    },
    {
      path: '/cart',
      name: 'Cart',
      component: () => import('@/views/Cart.vue')
    },
    {
      path: '/mine',
      name: 'Mine',
      component: () => import('@/views/Mine.vue')
    }
  ]
})

router.beforeEach((to, from, next) => {
  next()
})

export default router

在设置Vue Router时,我们定义了四个路由:Home、Shop、Cart和Mine。

四、组合Tabbar和Vue Router

现在我们已经将Vue Router配置为支持不同的路由,现在我们需要将Tabbar组件与Vue Router结合起来,以实现底部Tabbar的导航。 打开App.vue文件并将Tabbar组件添加到里面。

<template>
  <div id="app">
    <Tabbar></Tabbar>
  </div>
</template>

<script>
import Tabbar from '@/components/Tabbar.vue'

export default {
  name: 'App',
  components: {
    Tabbar
  }
}
</script>

现在我们已经将Tabbar组件添加到应用程序中,Vue Router将根据当前URL路径的不同来显示相应的组件。

现在,我们可以通过点击底部Tabbar中的选项卡来访问应用程序中的不同页面了。

五、示例展示

下面是一个简单的示例,演示了如何使用Vue封装一个Tabbar组件带组件路由跳转功能的实现。

<template>
  <div id="app">
    <Tabbar></Tabbar>
  </div>
</template>

<script>
import Tabbar from '@/components/Tabbar.vue'

export default {
  name: 'App',
  components: {
    Tabbar
  }
}
</script>
<template>
  <div>
    <router-view></router-view>
    <div class="tab-bar">
      <div class="tab-item" v-for="(item, index) in tabItems" :key="index" :class="{active: activeIndex === index}" @click="goto(index)">
        <img :src="item.icon" alt="">
        <div>{{item.title}}</div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'Tabbar',
  data() {
    return {
      activeIndex: 0,
      tabItems: [
        {
          title: '首页',
          icon: require('@/assets/images/tabBar/home.png'),
          path: '/'
        },
        {
          title: '商品',
          icon: require('@/assets/images/tabBar/shop.png'),
          path: '/shop'
        },
        {
          title: '购物车',
          icon: require('@/assets/images/tabBar/cart.png'),
          path: '/cart'
        },
        {
          title: '我的',
          icon: require('@/assets/images/tabBar/mine.png'),
          path: '/mine'
        }
      ]
    }
  },
  methods: {
    goto(index) {
      if (index !== this.activeIndex) {
        this.activeIndex = index
        this.$router.push(this.tabItems[index].path)
      }
    }
  }
}
</script>

<style scoped>
.tab-bar {
  display: flex;
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 50px;
  background-color: #fff;
  border-top: 1px solid #ccc;
  box-shadow: 0 0 10px rgba(0, 0, 0, .1);
  z-index: 999;
}
.tab-item {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: #999;
}
.tab-item.active {
  color: #00bcd4;
}
.tab-item img {
  width: 22px;
  height: 22px;
  margin-bottom: 2px;
}
</style>
import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/views/Home.vue'

Vue.use(Router)

const router = new Router({
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    },
    {
      path: '/shop',
      name: 'Shop',
      component: () => import('@/views/Shop.vue')
    },
    {
      path: '/cart',
      name: 'Cart',
      component: () => import('@/views/Cart.vue')
    },
    {
      path: '/mine',
      name: 'Mine',
      component: () => import('@/views/Mine.vue')
    }
  ]
})

router.beforeEach((to, from, next) => {
  next()
})

export default router

在示例代码中,我们封装了一个Tabbar组件,并向它传递了四个路由路径:/、/shop、/cart和/mine。当用户点击这些标签之一时,Vue Router会根据URL路径加载相应的组件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue封装一个Tabbar组件 带组件路由跳转方式 - Python技术站

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

相关文章

  • js前端上传文件缩略图技巧示例详解

    JS前端上传文件缩略图技巧示例详解 概述 随着移动设备的普及和网络带宽的提高,越来越多的网站开始支持大文件/多文件上传,而在上传前生成文件缩略图可以减轻服务器的负担,同时也能增强用户体验。本文将详细介绍JS前端上传文件缩略图的技巧。 目录 图片处理库 文件预览 文件MD5 文件分片上传 CORS跨域 图片处理库 在缩略图生成过程中,我们需要进行对图片的压缩、…

    JavaScript 2023年5月27日
    00
  • 详解WordPress开发中get_current_screen()函数的使用

    当我们开发WordPress主题或插件时,可能需要根据当前页面的信息进行一些处理。此时,可以使用get_current_screen()函数来获取当前页面的信息。本文将详解get_current_screen()函数在WordPress开发中的使用方法。 一、get_current_screen()简介 get_current_screen()函数是Word…

    JavaScript 2023年6月11日
    00
  • 浅析vue-router实现原理及两种模式

    浅析vue-router实现原理及两种模式 介绍 vue-router是一个用于Vue.js构建单页面应用的路由插件。它允许我们通过定义路由来组织应用的访问路径,并将路由与组件映射起来。 在本文中,我们将简单介绍vue-router的实现原理,包括路由注册、路由匹配、导航守卫等方面,并讨论两种模式,即hash模式和history模式。 路由注册 在vue-r…

    JavaScript 2023年6月11日
    00
  • 在vue项目中利用popstate处理页面返回的操作介绍

    在Vue项目中,可以利用 popstate 事件来处理页面返回的操作。下面详细介绍利用 popstate 的具体步骤。 1. 理解popstate事件 popstate 事件是 HTML5 History API 的一部分,可以在浏览器的后退或前进按钮被点击时进行传递。当浏览器历史发生变化时, popstate 事件将被触发。 2. 注册popstate事件…

    JavaScript 2023年6月11日
    00
  • ajax前台后台跨域请求处理方式

    当浏览器端发起跨域请求时,如果请求头中不包含适当的跨域示意标识,目标服务器会拒绝该请求,所以前端需要先向服务器获取跨域请求准许,然后再发起跨域请求。这个过程涉及到的技术就是 ajax 前台后台跨域请求处理方式。 下面是处理跨域请求的完整攻略和两个示例: 1. 服务器端处理方式 如果前台请求是 GET 请求,服务器端需要处理跨域请求,在 HTTP 响应头中添加…

    JavaScript 2023年6月11日
    00
  • Javascript中获取对象的原型对象的方法小结

    获取对象的原型对象是JavaScript中常见的操作,下面介绍一些获取对象的原型对象的方法。 方法一:使用Object.getPrototypeOf Object.getPrototypeOf() 方法返回指定对象的原型(内部[[Prototype]]属性的值)。 示例代码: const obj = {}; const proto = Object.getP…

    JavaScript 2023年5月27日
    00
  • 详解JS HTML Web端使用MQTT通讯测试

    下面是“详解JS HTML Web端使用MQTT通讯测试”的完整攻略: 一、MQTT介绍 即消息队列遥测传输(Message Queue Telemetry Transport,缩写为MQTT)是一个开放的物联网协议,由IBM于1999年开发。它是一个非常轻量的通讯协议,适合于各种网络连接条件下的物联网设备之间的消息通讯。同时,MQTT协议可以和HTTP和W…

    JavaScript 2023年5月27日
    00
  • 使用JavaScript进行表单校验功能

    下面是“使用JavaScript进行表单校验功能”的完整攻略,包含以下几个步骤: 1. 界面设计 首先需要针对需要进行表单校验的页面进行合理的界面设计,包括表单中需要填写的各种项以及提示信息等等。需要根据实际情况来进行定制,保证界面简洁、明了,并且易于理解和操作。 2. 校验规则制定 制定合理的校验规则可以有效地保证表单填写的正确性。针对不同项的填写内容,可…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部