1. 程式人生 > >vue-cli底部固定tabbar

vue-cli底部固定tabbar

  • Tabbar.vue
<template>
	<div class="tabberWarp" >
		<div class="warp">
			<Item :class="selected == item.page ? 'selected': 'normal'" :txt='item.txt' :page='item.page' @change='getVal' v-for='item in tabbarDes' :key='item.page'>
			</Item>
		</div>
	</
div
>
</template> <script> import Item from '@/components/Item.vue' export default{ components:{ Item }, data:function(){ return{ selected:'monitor', tabbarDes:[ { txt:'tab1', page:'page1' }, { txt:'tab2', page:'page2'
} ] } }, methods:{ getVal(res) { this.selected = res; } } }
</script> <style type="text/css"> .warp{ border-top: 1px solid #eee; display: flex; } .tabberWarp{ position: fixed; bottom: 0; left: 0; width: 100%; background: #fff; } .selected {
color: #272d2f; } .normal { color: gray; }
</style>
  • Item.vue
<template>
	<div class="itemWarp" @click='changePage' v-text="txt"></div>
</template>

<script>
	export default{
		props:{
			txt: String,
			page: String
		},
		methods: {
			changePage() {
				this.$router.push('/' + this.page);
				this.$emit('change', this.page);
			}
		}
	}
</script>

<style>
	.itemWarp {
		text-align: center;
		font-size: 14px;
		line-height: 44px;
		width: 100%;
	}
</style>
  • App.vue
<template>
  <div id="app">
    <router-view></router-view>
    <Tabbar></Tabbar>
  </div>
</template>
 
<script>
import Tabbar from'@/components/Tabbar.vue'
export default {
  name: 'app',
  created:function(){
    this.$router.push('/page1')
  },
  components:{
    Tabbar
  }
}
</script>

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #272d2f;
}
body {
  margin: 0;
  padding: 0;
  background-color: #ffffff;
}
</style>