vue 底部导航,vue实现头部导航栏的思路

  vue 底部导航,vue实现头部导航栏的思路

  本文详细阐述了Vue实现TabBar底部导航栏的方法,并通过实例代码进行了详细介绍。对大家的学习或工作都有一定的参考价值。让我们和边肖一起为有需要的朋友学习吧。

  

目录

  项目描述:项目目录:TabBar效果预览:TabBar实现思路一、如果下面有单独的TabBar组件,如何打包二、如何打包?TabBar中的实际内容由外界决定。三。自定义TabBarItem,可用于导入图片和文本项。可以建立文件目录。简介文件别名代码App.vue代码MainTabBar.vue代码TabBar.vue代码index.js路由配置代码home.vue代码category.vue代码profile.vue代码cart.vue代码Base.css代码img图片资源总结:主要难点:

  

项目介绍:

  要求:要求动态改变tabbar中的字符,动态改变和增加字符对应的图片,相应改变字符的颜色,动态改变和增加TabBaritem的图片,使整个项目具有灵活性,利用slots、routes传递父子组件的值,利用$router实现点击项会显示对应的页面。非常全面。在项目开发中遇到类似项目时,只需要复制主要代码就可以构建项目的大致框架。

  

项目目录:

  

TabBar效果预览:

  

TabBar实现思路

  

一、如果在下方有一个单独的TabBar组件,如何封装

  自定义tabbar组件,在APP中使用。

  让TabBar在底部,设置相关的样式。

  

二、TabBar中现实的内容由外界决定。

  定义插槽。

  弹性分数标签栏。

  

三、自定义TabBarItem,可以传入图片和文字

  自定义tabbarItem,并定义两个槽:图片和文本。

  将div包裹在两个槽的外层来设置样式。

  填充槽以实现底部TabBar的效果。

  该方法切实可行,易于实施。首先介绍一下目录。

  

项目文件目录建立

  

文件目录介绍

  我建立了一个views文件夹,其中包含五个文件。这五个文件包含五个vue文件,分别对应导航栏下的每个按钮。

  在assets下设置css和img文件夹,放置tabbar按钮所需的图片和基础类。

  在component文件夹中建立一个MainTabBar.vue文件和一个TabBar文件夹,MainTabBar的子组件和各种与slot相关的文件都放在这个文件夹中。

  路由器文件夹下的索引文件配置路由文件

  Main.js是项目的入口文件,项目中的所有页面都会加载main.js,因此main.js主要有三个功能:

  实例化VUE

  放置项目中经常用到的插件和CSS样式,比如网络请求axios和vue-resource,图片的懒加载模块:vue-;azyload

  存储基本信息等全局变量。

  每个文件夹中的代码实现

  第一步,文件多,引用往往会带来404错误。这里我们先建立文件别名,vue会建立文件别名进行详细说明。

  找到resolve对象并在alias中写入每个文件的别名:

  

文件起别名代码

  代码:

  解决:{

  扩展名:[。js ,。vue ,。json],

  别名:{

  @: resolve(src ),

   assets: resolve(src/assets )。

   components :resolve( src/components )。

   views :解析( src/views ),

  }

  },

  

App.vue代码

  在App.vue中引用MainTabBar组件和每个tabbaritem对应的文件:

  模板

  div id=应用程序

  路由器视图/路由器视图

  主选项卡栏/主选项卡栏

  /div

  /模板

  脚本类型=“模块”

  从“组件/maint bar”导入maint bar

  导出默认值{

  名称:“应用程序”,

  组件:{

  维护栏

  }

  }

  /脚本

  风格

  @ import assets/CSS/base ;

  /风格

  

MainTabBar.vue代码

  MainTabBar组件代码:数字、颜色、文本等。要求可修改的TabBarItem是动态的。需要创建各种插槽。

  模板

  差异

  标签栏

  tab-bar-item path=/home active color=紫色

  img slot= item-icon src= ~ assets/img/tabbar/shou ye . png alt=

  img slot= item-icon-active src= ~ assets/img/tabbar/shouye . active . png alt=

  Div slot=item-text 主页/div

  /选项卡栏项目

  tab-bar-item path=/category active color=紫色

  img slot= item-icon src= ~ assets/img/tabbar/fenlei。png alt=

  img slot= item-icon-active src= ~ assets/img/tabbar/fenlei。活跃。png alt=

  div slot=item-text 分类/div

  /选项卡栏项目

  tab-bar-item path=/cart active color=紫色

  img slot= item-icon src= ~ assets/img/tabbar/gouweche。png alt=

  img slot= item-icon-active src= ~ assets/img/tabbar/gouweche。活跃。png alt=

  div slot=item-text 购物车/div

  /选项卡栏项目

  选项卡栏项目路径=/profile activeColor=purple

  img slot= item-icon src= ~ assets/img/tabbar/沃德。png alt=

  img slot= item-icon-active src= ~ assets/img/tabbar/沃德。活跃。png alt=

  div slot=item-text 我的/div

  /选项卡栏项目

  /选项卡栏

  /div

  /模板

  脚本

  从"组件/标签栏/标签栏"导入标签栏

  从"组件/tabbar/TabBarItem "导入TabBarItem

  导出默认值{

  名称: MainTabBar ,

  组件:{

  TabBar,

  TabBarItem

  }

  }

  /脚本

  风格

  /风格

  

TabBar.vue代码

  TabBar.vue文件,改文件为可维护酒吧。某视频剪辑软件中的子组件:

  模板

  div id=tab-bar

  插槽/插槽

  /div

  /模板

  脚本

  导出默认值{

  名称:" TabBar "

  }

  /脚本

  风格

  /风格

  

TabBarItem.vue代码

  TabBarItem.vue为可维护酒吧。某视频剪辑软件的子组件

  模板

  div class= tab-bar-item @ click= item click

  div v-if=! isActive

  插槽名称=项目图标/slot

  /div

  div-否则

  slot name= item-icon-active /slot

  /div

  div:style= active style slot name= item-text /slot/div

  /div

  /模板

  脚本

  导出默认值{

  名称: TabBarItem ,

  道具:{

  路径:字符串,

  activeColor:{

  类型:字符串,

  默认值:"红色"

  }

  },

  data(){

  返回{

  //isActive:true

  }

  },

  计算值:{

  isActive(){

  //判断

  //返回这个. route.path.indexOf(this.path)!==-1

  //返回这个10.99 $ route . path===this . path

  归还这个. route.path.indexOf(this.path)?假:真

  },

  activeStyle(){

  把这个还回去isActive?{color:this.activeColor}:{}

  }

  },

  方法:{

  itemClick(){

  这个. router.replace(this.path)

  }

  }

  }

  /脚本

  风格

  #选项卡栏{

  显示器:flex

  }

  #选项卡栏{

  背景色:# f6f6f6

  border-top:2px # CCC;

  位置:固定;

  左:0;

  右:0;

  底部:0;

  盒影:0px -1px 1px rgba(100,100,100,2);

  }。选项卡栏项目{

  flex:1;

  文本对齐:居中;

  高度:49px

  字体大小:14px

  }。标签栏-项目图像{

  宽度:24px

  高度:24px

  margin-top:3px;

  垂直对齐:居中;

  margin-bottom:3px;

  }。活动{

  颜色:红色;

  }

  /风格

  

index.js路由配置代码

  路由器文件夹下的指数文件为路由的配置:

  从“vue”导入某视频剪辑软件

  从" vue路由器"导入武鲁特

  const Home=()=import( views/Home/Home )

  常量类别=()=导入(视图/类别/类别)

  const Cart=()=import(视图/购物车/购物车)

  const Profile=()=import(./视图/配置文件/配置文件)

  //1.安装插件

  Vue.use(VueRouter)

  //2.创建路由对象

  常量路由=[

  {

  路径:,

  重定向:"/home "

  },

  {

  路径:"/home ",

  组件:主页

  },

  {

  路径:"/类别",

  组件:类别

  },

  {

  路径:"/购物车",

  组件:购物车

  },

  {

  路径:"/个人资料",

  组件:配置文件

  }

  ]

  const router=new VueRouter({

  路线,

  模式:"历史"

  })

  //3.导出路由器

  导出默认路由器

  视图中的家代码,推车代码,个人资料代码,类别代码:

  

home.vue代码

  模板

  氘首页/h2

  /模板

  脚本

  导出默认值{

  名称:"家"

  }

  /脚本

  风格

  /风格

  

category.vue代码

  模板

  氘分类/h2

  /模板

  脚本

  导出默认值{

  名称:"家"

  }

  /脚本

  风格

  /风格

  

profile.vue代码

  模板

  氘个人/h2

  /模板

  脚本

  导出默认值{

  名称:"家"

  }

  /脚本

  风格

  /风格

  

cart.vue代码

  模板

  氘购物车/h2

  /模板

  脚本

  导出默认值{

  名称:“家”

  }

  /脚本

  风格

  /风格

  

Base.css代码

  css文件下base.css的内容:

  正文{

  填充:0px

  边距:0px

  }

  

img图片资源

  实现~

  

总结:

  项目非常全面,包括槽位、走线、子组件和父组件的值传递、别名设置等各种知识。

  项目的动态内容:tabbar的文本、图片、颜色可以动态改变,下一个类似的项目可以直接引用这些文件。

  

主要难点:

  1.当点击相应的TabBarItem时,改变图片和文字的颜色。这里,使用当前活动路由是否对应于所传递的地址。如果是,它将变为真,并将商品返回到假:

  计算值:{

  isActive(){

  //判断

  归还这个。$route.path.indexOf(this.path)?假:真

  },

  activeStyle(){

  把这个还回去。isActive?{color:this.activeColor}:{}

  }

  },

  方法:{

  itemClick(){

  这个。$router.replace(this.path)

  }

  }

  上面的代码还有其他方法:

  归还这个。$route.path.indexOf(this.path)!==-1

  归还这个。$route.path===this.path

  二、父组件传值问题,父组件传来的对应文件路径和字体颜色被子组件接受和使用:

  导出默认值{

  名称: TabBarItem ,

  道具:{

  路径:字符串,

  activeColor:{

  类型:字符串,

  默认值:“红色”

  }

  },

  data(){

  返回{}

  },

  完成项目~

  这就是这篇关于Vue实现TabBar底部导航栏的文章。希望对大家的学习有帮助,也希望大家多多支持。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: