首页 > 其他 > 详细

Vue14之TabBar

时间:2020-04-28 22:52:39      阅读:57      评论:0      收藏:0      [点我收藏+]

  TabBar中显示的内容由外界决定,可以传入图片文字等。

技术分享图片

 

   我们想制作这个东西,首先我们新建了一个tabbar的脚手架项目。

  然后我们删除掉helloworld相关的内容,之后我们先写个大概试试:

  技术分享图片asserts下面设置两个文件夹,用来装css样式和img图片。

body{
    padding: 0;
    margin: 0;
}

  随便写个样式然后如何使用这个样式呢?当然是在App.vue的style标签中。

@import "./assets/css/base.css";

  先把目标图片中的四个类别用div造出来:

<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>

  然后我们加上一些样式让它看起来像个人做的。

  .tab-bar-item{
    flex:1;   //等间隔
    text-align:center;  //四个模块内容居中
    height:49px;    //手机端适配高度默认49
  }

  然后制作一下分割的线和tabbar背景色:

  #tab-bar{
    display: flex;  //内容横着铺
    background-color:#f6f6f6;  #背景颜色
    position:fixed;       #位置
    left:0;
    right:0;
    bottom:0;
    box-shadow: 0px -3px 1px rgba(100,100,100,.3);  #分割线颜色
  }

  效果:

技术分享图片

 

  感觉还可以哈。但是这样写代码以后肯定会很复杂很乱,我们需要封装然后放在各种文件夹里管理。

  我们在components中设置一个tabbar文件夹,里面加入一个TabBar.vue文件,然后我们加入以下代码:

  

<template>
    <div id="tab-bar">
      <div class="tab-bar-item">
          <img src="../../assets/img/tabbar/detec.png" >
          <div>警察信息</div>
      </div>
      <div class="tab-bar-item">
          <img src="~@/assets/img/tabbar/gun.svg" >
          <div>武器分类</div>
      </div>
      <div class="tab-bar-item">
          <img src="~@/assets/img/tabbar/letter.svg" >
          <div>绑架信箱</div>
      </div>
      <div class="tab-bar-item">
          <img src="~@/assets/img/tabbar/money.svg" >
          <div>抢钱总计</div>
      </div>
    </div>
</template>

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

<style scoped>
 #tab-bar{
    display: flex;
    background-color:#f6f6f6;
    position:fixed;
    left:0;
    right:0;
    bottom:0;
    box-shadow: 0px -3px 1px rgba(100,100,100,.3);
  }
  .tab-bar-item{
    flex:1;
    text-align:center;
    height:49px;
  }

  .tab-bar-item img{
      width:24px;
      height:24px;
  }
</style>

  说白了就是把代码转移到这里来了,把这个TabBar当作一个组件。然后我们注册这个组件:

  下面是App.vue的部分内容

<template>
  <div id="app">
    <tab-bar></tab-bar>
  </div>
</template>

<script>
import TabBar from ‘./components/tabbar/TabBar‘

export default {
  name: ‘App‘,
  components: {
    TabBar
  }
}
</script>

  这里我们加入一个tab-bar到template中,这个组件我们import后在components中注册。

   这样我们实现了效果:

技术分享图片

 

   但是这样写代码可拓展性还是不好,我们应该用插槽的方法来对代码进行重构。也就是把TabBarItem单独提取出来,新建这个TabBarItem.vue文件:

<template>
    <div class="tab-bar-item">
        <slot name="item-icon"></slot>
        <slot name="item-text"></slot>
    </div>
</template>

<script>

export default {
  name: ‘TabBarItem‘,
}
</script>

<style>
  .tab-bar-item{
    flex:1;
    text-align:center;
    height:49px;
    margin-top:3px;
    vertical-align: middle; 
  }

  .tab-bar-item img{
      width:24px;
      height:24px;
  }
 
</style>

  下面都是样式,上面我们可以看到这个tabbaritem实际上由一个icon插槽和一个text插槽构成。那么tabbar呢?

<template>
    <div id="tab-bar">
      <slot></slot>
    </div>
</template>

  样式代码省略了,tabbar则由一个插槽构成,当然这个插槽实际就是值tabbaritem了。

  那么界面呢?

  

<template>
  <div id="app">
    <tab-bar>
      <tab-bar-item>
        <img slot="item-icon" src="./assets/img/tabbar/cop.svg" >
        <div slot="item-text">警察信息</div>
      </tab-bar-item>
      <tab-bar-item>
        <img slot="item-icon" src="./assets/img/tabbar/gun.svg" >
        <div slot="item-text">武器分类</div>
      </tab-bar-item>
      <tab-bar-item>
        <img slot="item-icon" src="./assets/img/tabbar/letter.svg" >
        <div slot="item-text">绑架信箱</div>
      </tab-bar-item>
      <tab-bar-item>
        <img slot="item-icon" src="./assets/img/tabbar/money.svg" >
        <div slot="item-text">抢钱总计</div>
      </tab-bar-item>
    </tab-bar>
  </div>
</template>

  当然是嵌套着把插槽都实现了,这样新添加也非常的方便,别忘记要在components也注册一下tabbarItem才可以。

import TabBar from ‘./components/tabbar/TabBar‘
import TabBarItem from ‘./components/tabbar/TabBarItem‘
export default {
  name: ‘App‘,
  components: {
    TabBar,
    TabBarItem
  }
}

  这样就可以了。

  

 

Vue14之TabBar

原文:https://www.cnblogs.com/snailbuster/p/12797888.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!