• 用vue对tabbar的封装


     

     

    这是要做成写封装效果,

    这个重点就是要学会router的用法,用router进行各个页面的跳转,(这里的跳转不是说真跳转了,而是url拼接了个路径。然后js代码读到这个路径,去做对应的页面展示)

    这是文件路径,

    首先我们来看看router里面的index.vue代码

     1 import Vue from 'vue'
     2 import VueRouter from 'vue-router'
    //懒加载 3 const Home = () => import('../views/home/Home') 4 const Category = () => import('../views/category/Category') 5 const File = () => import('../views/file/File') 6 const Cart = () => import('../views/cart/Cart') 7 //安装插件ue 8 Vue.use(VueRouter) 9 //创建路由对象 10 const routes = [ 11 { 12 path: '', 13 redirect: '/home' 14 }, 15 { 16 path: '/home', 17 component: Home 18 }, 19 { 20 path: '/category', 21 component: Category 22 }, 23 { 24 path: '/file', 25 component: File 26 }, 27 { 28 path: '/cart', 29 component: Cart 30 }, 31 ] 32 const router = new VueRouter({ 33 routes, 34 mode: 'history' 35 }) 36 //导出 37 export default router

    这里采用的懒加载(将不同的路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应的组件这样就更加高效了)

    然后是Tabbar.vue这里面采用的预留插槽,这样使别人用起来更加的方便,可以添加不同的样式,

     1 <template>
     2     <div class="tab-bar">
     3       <slot></slot>
     4     </div>
     5   </template>
     6   
     7   <script>
     8     export default {
     9       name: "TabBar"
    10     }
    11   </script>
    12   
    13   <style scoped>
    14     .tab-bar {
    15       background-color: #f6f6f6;
    16       height: 49px;
    17       border-top: 1px solid #eee;
    18       box-shadow: 0 -1px 1px rgba(150,150,150,.08);
    19   
    20       position: fixed;
    21       left: 0;
    22       right: 0;
    23       bottom: 0;
    24   
    25       display: flex;
    26       text-align: center;
    27     }
    28   </style>
    29   

    然后是TabBarItem.vue里面的代码

     1 <template>
     2     <div class="tab-bar-item" @click="itemClick">
     3         <div v-if="!isActive">  <slot name='item-icon'></slot></div>
     4         <div v-else>  <slot name='item-icon-active'></slot></div>
     5         <div :style='activeStyle'><slot name='item-text'></slot></div>
     6         
     7     </div> 
     8 </template>
     9 
    10 <script>
    11     export default {
    12         name: 'TabBarItem',
    13         props: {
    14             path:String,
    15             activeColor:{
    16                 type:String,
    17                 default:'hotpink'
    18             }
    19         },
    20         
    21         data() {
    22             return {
    23                
    24             }
    25         },
    26         computed:{
    27             isActive(){
    28                return  this.$route.path.indexOf(this.path)!== -1
    29             },
    30             activeStyle(){
    31                 return this.isActive?{color:this.activeColor}:{}
    32             }
    33         },
    34         methods: {
    35             itemClick() {
    36                 this.$router.push(this.path)
    37             }
    38         }
    39     }
    40 </script>
    41 <style scoped>
    42       .tab-bar-item {
    43         flex: 1;
    44         text-align: center;
    45         height: 49px;
    46         font-size: 14px;
    47     }
    48     .tab-bar-item img {
    49          24px;
    50         height: 24px;
    51         margin-top:3px;
    52         vertical-align: middle;
    53         margin-bottom: 2px;
    54     }
    55   
    56     </style>

    依旧是插槽,然后颜色和路由地址是从外部组件传进来的

  • 相关阅读:
    springmvc 路由
    springMVC 流程
    SqlServer中Sql语句的逻辑执行顺序
    中小型公司静态资源管理部署方案
    浅谈SQL Server中的三种物理连接操作
    Zclip复制页面内容到剪贴板兼容各浏览器
    C#中如何利用操作符重载和转换操作符
    类型构造器(静态构造函数)的执行时机你知道多少?
    容器云技术选择之kubernetes和swarm对比
    kafka入门
  • 原文地址:https://www.cnblogs.com/cookie-bubble/p/13568219.html
Copyright © 2020-2023  润新知