Vue-CLI + Vue3 + Vue-Router4 实现tabbar小案例

Vue-CLI + Vue3 + Vue-Router4 实现tabbar小案例

tabbar导航栏案例:该案例实现了基础的组件封装,编程式路由,以及插槽的使用,对于我们日常组件化开发有着很大的启示作用,主要效果是点击下方的导航栏链接,上方内容区显示对应的组件内容,就如果我们常用的手机App一样。

效果图:

项目结构图:

svg图片资源下载:点击下载图片资源

1、 使用Vue-CLI新建tabbar工程,删除不必要的vue组件,并且取消代码检查:lintOnSave:false
2、 在assets文件夹下建立css和img文件夹,存放静态资源,将图片复制到img文件夹中的tabbar子文件夹中

3、 在css文件夹中建立base.css文件:

body{
   
    padding: 0;
    margin: 0;
}
/*然后在App.vue组件的style中引入css/base文件:@import "assets/css/base.css",此处不建议在main.js中引入*/

4、 修改App.vue的内容:

<template>
  <div id="app">
    <div id="tab-bar">
      <div class="tab-bar-item">首页</div>
      <div class="tab-bar-item">分类</div>
      <div class="tab-bar-item">购物车</div>
      <div class="tab-bar-item">我的</div>
    </div>
  </div>
</template>

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

<style>
@import "assets/css/base.css";
#tab-bar{
  display: flex; /* 弹性盒子布局 */
  background-color: #f1f1f1;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: 50px;
  box-shadow: 0 -2px 2px rgba(100,100,100,0.2);
}
.tab-bar-item{
  flex: 1; /* 对多项内容等分排列 */
  text-align: center;
  height: 49px;
  font-size: 14px;
}
</style>

5、 将导航栏封装成TabBar和TarBarItem两个组件,步骤如下:

//1. 把id为tab-bar的层及相应的css代码等封装在一起,作为一个组件
//2. 在components文件夹中建立一个名为tabbar的子文件夹,单独存放tabbar组件相关的组件,不要把所有的组件都直接放在components文件夹下,便于管理。[项目越大,组件越多]
//3. 在tabbar文件夹中建立名为TabBar.vue文件,把App.vue文件中的内容复制到TabBar.vue中
//4. 在TabBar.vue中,有四项内容,由于每一项在后期显示时有图片和文字,所以把TabBar.vue中的每一项封装成一个组件:TabBarItem.vue,考虑到TabBar.vue中使用的TabBarItem子组件数量是不固定的,所以要用到插槽。
//代码如下:

TabBar.vue内容:

<template>
  <div id="tab-bar">
    <!-- 使用插槽,让App.vue根据需要,插入内容 -->
    <slot></slot>
  </div>
</template>

<script>
export default {
  name: "TabBar"
}
</script>

<style scoped>
#tab-bar{
  display: flex; /* 弹性盒子布局 */
  background-color: #f1f1f1;
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  height: 50px;
  box-shadow: 0 -2px 2px rgba(100,100,100,0.2);
}
</style>

TabBarItem.vue内容:

<template>
  <div class="tab-bar-item">
    <img src="../../assets/img/tabbar/home.svg" alt="" />
    <div>首页</div>
  </div>
</template>

<script>
export default {
  name: "TabBarItem"
}
</script>

<style scoped>
.tab-bar-item {
  flex: 1; /* 对多项内容等分排列 */
  text-align: center;
  height: 49px;
  font-size: 14px;
}

.tab-bar-item img{
  width: 24px;
  height: 24px;
  margin-top: 3px;
  margin-bottom: 2px;
  vertical-align: middle;
}
</style>

App.vue内容:

<template>
  <div id="app">
    <tab-bar>
      <!-- 根据需要在插槽位置插入4个子组件TabBarItem[数量可变] -->
      <tab-bar-item></tab-bar-item>
      <tab-bar-item></tab-bar-item>
      <tab-bar-item></tab-bar-item>
      <tab-bar-item></tab-bar-item>
    </tab-bar>
  </div>
</template>

<script>
  //导入TabBar组件
  import TabBar from "./components/tabbar/TabBar";
  //导入TabBarItem组件
  import TabBarItem from "./components/tabbar/TabBarItem";
  export default {
    name:'App',
    components:{
      TabBarItem,
      TabBar
    }
  }
</script>

<style>
@import "assets/css/base.css";
</style>

6、 测试运行…界面会出现四个子组件,但内容都一样,而我们要实现的是显示不同内容的4个组件,所以就可以在TabBarItem中也使用插槽(上方显示图片,下方显示文字):

<template>
  <div class="tab-bar-item">
    <!--  如果使用多个插槽,要使用具名插槽  -->
    <slot name="item-icon"></slot>
    <slot name="item-text"></slot>
  </div>
</template>

7、 修改App.vue,将TabBarItem中的插槽填满,把其中对于img的样式放到App.vue中:<

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值