vue-5-2 tabbar的完善
当整体tabbar完成,开始完善。此时,暂时与tabBar组件无关,只调整App.vue和tabBarItem组件
1. 点击某个tabBarItem后,显示该item被选中的icon,并且显示内容
1. 创建路由index.js, 并且添加路由对应的.vue组件
2. 将tabBarItem组件与路由条目相关联
1. 四个item,与不同的路由条目关联,所以不能写死在tabBarItem中,而是通过App.vue向其传入路由条目,而tabBarItem中,使用props接收路由条目后,进行跳转即可
App.vue组件中:
"app">"/home"> "item-icon" src="../src/assets/img/tabbar/index.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/index2.png" alt="">
"item-text">首页"/date"> "item-icon" src="../src/assets/img/tabbar/appointment.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/appointment2.png" alt="">
"item-text">日期"/order"> "item-icon" src="../src/assets/img/tabbar/order.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/order2.png" alt="">
"item-text">订单"/profile"> "item-icon" src="../src/assets/img/tabbar/user.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/user2.png" alt="">
"item-text">用户
2. tabBarItem组件中:
1. 通过props接收 link 传入的路由条目
2. 通过v-on绑定事件onclik,onclik事件被触发时,进行路由跳转:this.$router.replace(this.link)
3. 在接收 icon 图片的 slot 中通过 v-if 来判断计算属性isActive是否为true,而isActive计算属性中,则通过this.$route.path.indexOf(this.link) !== -1 来判断传入的路由条目是否是活跃路由,从而返回结果true或false
2. 在App.vue中点击哪个item,则显示其被选中时的icon
class="tab-bar-item" @click="onclick">if="!isActive">"item-icon"> else>"item-icon-active"> "item-text">
3. 其它可自定义:item选中后的字体颜色,希望能手动传入,而不是自动固定颜色
调整:
1. 在tabBarItem组件的props中,创建新的接收参数,如activeColor
2. 在tabBarItem组件的标签中,文字显示部分,标签中动态绑定:style属性,而给style赋予的样式,则使用新的计算属性activeStyle的返回值来作为样式。
activeStyle计算属性中,获取另一个计算属性isActive的返回值,从而设置:当某条路由活跃时,使用传入activeColor的值作为color的值。
return this.isActive ? {color: this.activeColor} : {}
tabBarItem组件修改后:
class="tab-bar-item" @click="onclick" >if="!isActive">"item-icon"> else>"item-icon-active">
"activeStyle">"item-text">
App.vue中则是:
"app">
"/home" activeColor="blue"> "item-icon" src="../src/assets/img/tabbar/index.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/index2.png" alt="">
"item-text">首页"/date" activeColor="blue"> "item-icon" src="../src/assets/img/tabbar/appointment.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/appointment2.png" alt="">
"item-text">日期"/order" activeColor="blue"> "item-icon" src="../src/assets/img/tabbar/order.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/order2.png" alt="">
"item-text">订单"/profile" activeColor="blue"> "item-icon" src="../src/assets/img/tabbar/user.png" alt="">
"item-icon-active" src="../src/assets/img/tabbar/user2.png" alt="">
"item-text">用户
2. 补充知识点:
(像上边手动传入字体颜色时不使用此该方法)
当标签中使用v-bind直接绑定class设置样式时
:class="{active: isActive}"
active是下边中设置的样式的名称: .active{ color: yellow; }
isActie是判断条件
class="tab-bar-item" @click="onclick" >class="{active: isActive}">"item-text">
3. 完整写法,创建一个新的vue组件,MainTabBar组件,用来代替App.vue组件接收TabBar和TabBarItem组件,调用两个组件并传递所需参数
而App.vue中,导入MainTabBar组件,注册后使用即可