vue中this.$router.push()跳转导致页面刷新导航栏active不改变问题解决~!

在Vue项目开发中遇到导航栏active状态不更新的问题,原因是路由跳转导致子组件被完全刷新。通过在子组件created钩子中监听路由变化,动态设置activeNum解决了问题。代码中使用forEach遍历导航项,根据当前路由匹配导航项并设置activeNum。
摘要由CSDN通过智能技术生成

前言

写vue项目中遇到了导航栏绑定的active不改变,路由正常跳转了结果导航栏显示还是第一个。

于是我就开始排错,发现每次路由跳转,导航栏绑定的activeNum都被刷新掉归0了,也就是显示第一个。刚开始确实好久没发现问题,以前也是这么写的没出过问题。

转机

后来我想是不是因为,这个导航栏是在router-view跳转的子组件中的原因,页面跳转的时候将整个子组件都刷新了,表面上看是子组件中的子组件刷新(相当于孙子级别的组件刷新),其实跳转的时候是刷新的整个子组件。

解决

然后我就在子组件的导航栏中created下加了方法,每次刷新完了的话调用超热created中的方法获取路由,然后再拿获取到的路由去和导航栏对应的路由进行比对,获取到对应的索引再给activeNum赋值!就这样成功的解决啦!!!

总结

在路由跳转的时候如果是如果有多个层级的路由,那么出了第一个层级路由的父组件不会刷新以外,其他层级的路由都会将整个子组件刷新。如果想解决的话也可以尝试用keep-alive解决问题(ps:我没试过)

放一下解决的代码

created() {
        this.navBarItem.forEach((item,index) => {
            //检测当前路由路径  然后跳转到对应的item
            if(decodeURI(this.$route.path).search(item.path) != -1) {
                this.activeNum = index;
            }
        })
    },
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue,使用this.$router.push()来进行页面跳转是正确的方法,但是有时候可能会出现跳转没有反应的情况。引用提到了一个可能的问题是路由配置的错误。请确保你的路由配置正确,路径名与组件名匹配。另外,你也可以尝试在路由跳转的代码加入一个错误处理函数,以便调试错误。引用提到了一种解决方法,可以尝试将this.$router.push()改为router.push()来进行页面跳转。这种方法可以通过引入路由对象router来实现页面跳转。具体的代码可以参考引用的示例。引用提到了另一种可能的解决方法,即使用keep-alive组件来缓存组件,以避免组件的重新渲染。这样可以解决路由跳转导致页面刷新问题。但需要注意的是,这种方法只适用于多个层级的路由情况。你可以尝试在对应的组件使用keep-alive组件来解决问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vuethis.$router.push()失效解决办法](https://blog.csdn.net/weixin_45912825/article/details/117752515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [vuethis.$router.push()跳转导致页面刷新导航栏active改变问题解决~!](https://blog.csdn.net/qq_45332221/article/details/118688274)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值