解决vantUI底部tabbar导航与页面不对应问题(window.loaction.hash)

前言

有一个需求是利用vant底部的tabbr组件,搭配vueRouter,实现路由导航。需要自定义图标,并且选中后图标应该变换选中后的样式。vantui是提供了路由模式的tabbar的,但是好像不支持自定义图标。所以用了下图的方法:
在这里插入图片描述
使用后,发现一个问题,就是如果进入二级页面,也就是不包含tabbar组件的页面,那么当前选中的tabbar项就丢失了,会变回默认的0,所以必须在离开tabbar组件所在页面的时候,记住当前选中的tabbar项或者判断当前路由,实现根据路由重新初始化tabbar所对应的active。方便起见,我选择了后者。

解决

  created() {
    /*解决进入二级路由返回默认选中首页tab的问题*/
    const navBarActive = window.location.hash;
    if(navBarActive.includes("#/home")){
      this.active = 0;
    } else if(navBarActive.includes("#/baike")){
      this.active = 1;
    } else if(navBarActive.includes("#/mall")){
      this.active = 2;
    } else if(navBarActive.includes("#/cart")){
      this.active = 3;
    } else if(navBarActive.includes("#/me")){
      this.active = 4;
    }
  }

vue-router是基于window.loaction的hash属性来实现的,所以每次回到主页面,也就是包含tabbar组件的页面时,判断当前页面所对应的地址的hash,再逐个和对应的tabbar所对应的路由做比较,如果符合,就选中对应的tabbar项,即给active赋值。这里之所以没有使用switch来判断,是因为页面地址可能带参数,所以不能直接navBarActive和路由做相等的判断,而是包含的关系。

写在最后

因为vue-router是基于window.location的hash属性的,所以很多和路由相关的问题可以从window.location入手。在控制台打印出window.location:
在这里插入图片描述
可以看到关于当前页面地址的信息,hash属性其实就对应了我们配置的对应页面的路由,我们还可以通过window.location.href来更改页面地址。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,针对你的问题,我可以给你一些思路和建议。首先,我们需要明确一下问题的背景和需求: 1. 多页面:指的是我们的项目中有多个页面,而不是单页应用(SPA)。 2. 共用底部导航栏:指的是我们需要在每个页面中都展示同一个底部导航栏,这个导航栏通常被称为 Tabbar。 基于以上需求,我们可以考虑使用 Vue.jsVant UI 组件库来实现多页面共用底部导航栏。具体实现步骤如下: 1. 创建多个页面:在项目中创建多个页面,每个页面对应一个路由。这些页面可以是纯 HTML 页面,也可以是基于 Vue.js 框架开发的页面。 2. 定义底部导航栏组件:在 Vant UI 组件库中提供了 Tabbar 组件,我们可以使用这个组件来实现底部导航栏。在 Vue.js 中定义一个底部导航栏组件,将 Tabbar 组件作为该组件的一部分。 3. 在路由中引入底部导航栏组件:在每个页面的路由中引入底部导航栏组件,并将组件渲染在页面底部。这样每个页面就都会展示同一个底部导航栏。 4. 处理底部导航栏的选中状态:由于底部导航栏是共用的,所以需要在不同的页面中处理导航栏的选中状态。我们可以通过路由的钩子函数来实现这一功能。比如在路由的 beforeEach 钩子函数中,根据当前路由的 path 来设置导航栏的选中状态。 以上就是实现多页面共用底部导航栏的大致思路和步骤。当然,具体的实现可能还需要根据项目的具体需求进行一些调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小绵杨Yancy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值