情景:

在进行正常页面跳转操作后(页面A跳转到页面B),点击浏览器的左上角的‘后退’按钮,点击后,可以看到url地址已经发生了变化(url由页面B变为页面A),hash值也已经是上一页的路由,但是浏览器显示的内容却没有发生变化(依旧是页面B)。

没有任何报错(页面A和页面B无任何js错误或者兼容性错误)。

若有错误也会导致页面跳转不成功,页面依旧是当前页面,但是控制台会报ERROR。

但是页面按浏览器刷新按钮后,一切又恢复了正常。真的让人很头疼,IE,Chrome,fireFox,Edge都是这样

过程:

百度查了很多,就是hash模式导致的,所以重新出发下hashchange事件解决了问题,

具体如下:

本地路由配置:

 const baseRoute = [
{ path: '/login', name: 'login', component: Login },
{ path: '/404', name: 'page404', component: page404 },
{path: '/', redirect: '/index', component: Layout, name: 'dashboard'},
{
path: '/',
redirect: '/index',
component: Layout,
children: [
{
path: 'index',
name: 'index',
component: xxxx,
meta: {
title: 'xxx',
icon: ''
}
},
{
path: 'project',
name: 'project',
component: xxxx,
meta: {
dynamic: true, // 动态面包屑标题
title: ''
}
},
{
path: 'project/onlineEquip/debug/:id',
name: 'debug',
component: Debug,
meta: {
title: '调试',
level: 3,
hidden: true
}
},
{
path: 'project/onlineEquip/detail/:id',
name: 'detail',
component: Detail,
meta: {
title: 'xxx',
level: 3,
hidden: true
}
},
{
path: 'project/log',
name: 'log',
component: Log,
meta: {
title: '日志',
level: 2,
hidden: true
}
},
{
path: 'project/myPhyModel',
name: 'CreateModel',
component: xxxxx,
meta: {
title: 'xxxxx',
level: 2,
hidden: true
}
},
{
path: 'project/myPhyModel/detail',
name: 'ModelDetail',
component: xxx,
meta: {
title: '详情',
level: 3,
hidden: true
}
}
]
},
{
path: '*', // 页面不存在的情况下会跳到404页面
redirect: '/404',
name: 'notFound',
hidden: true
}
]
const router = new Router({
routes: baseRoute // 这里默认是hash模式
}) export default router

解决办法:

1、vue-router HTML5 History 模式  可以设置为history 模式解决问题

2、在hash模式的前提下来解决,

  a、首先学习下hash模式的url相关知识

  

  

  b、对,就是通过onhashchange 事件来解决这个bug

    APP.vue入口中:

    

mounted () {
// 检测浏览器路由改变页面不刷新问题,hash模式的工作原理是hashchange事件
window.addEventListener('hashchange', () => {
let currentPath = window.location.hash.slice(1)
if (this.$route.path !== currentPath) {
this.$router.push(currentPath)
}
}, false)
},

  

  重新刷新一遍路由,问题就可以解决啦!

  

关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转的更多相关文章

  1. [Vue 牛刀小试]:第十三章 - Vue Router 基础使用再探(命名路由、命名视图、路由传参)

    一.前言 在上一章的学习中,我们简单介绍了前端路由的概念,以及如何在 Vue 中通过使用 Vue Router 来实现我们的前端路由.但是在实际使用中,我们经常会遇到路由传参.或者一个页面是由多个组件 ...

  2. Vue Router:使用 props 将组件和路由解耦

    在组件中使用 $route 会使之与其对应路由形成高度耦合,从而使组件只能在某些特定的 URL 上使用,限制了其灵活性. 可以使用 props 将组件和路由解耦. 一 路由配置(布尔模式): impo ...

  3. asp.net 退出登陆(解决退出后点击浏览器后退问题仍然可回到页面问题)

    代码如下: Session.Abandon(); Response.Redirect("Login.aspx"); 但是这样点点击浏览器的后退仍然可以回到刚才的页面,这可不行,在网 ...

  4. [Vue 牛刀小试]:第十四章 - 编程式导航与实现组件与 Vue Router 之间的解耦

    一.前言 在上一章的学习中,通过举例说明,我们了解了 Vue Router 中命名路由.命名视图的使用方法,以及如何通过 query 查询参数传参,或者是采用 param 传参的方式实现路由间的参数传 ...

  5. Vue Router的原理及history模式源码实现

    Hash 模式 URL中 # 后面的内容作为路径地址,可以通过location.url直接切换路由地址,如果只改变了#后面的内容,浏览器不会向服务器请求这个地址,会把这个地址 记录到浏览器的访问历史中 ...

  6. 「进阶篇」Vue Router 核心原理解析

    前言 此篇为进阶篇,希望读者有 Vue.js,Vue Router 的使用经验,并对 Vue.js 核心原理有简单了解: 不会大篇幅手撕源码,会贴最核心的源码,对应的官方仓库源码地址会放到超上,可以配 ...

  7. js监听手机端点击物理返回键或js监听pc端点击浏览器返回键

    之前在项目中遇到一个问题,就是在微信网页上面本来是有返回按钮的,但是大多数人都为了方便,会使用安卓手机自带的物理返回键,这个返回键按下后,就会按照你浏览器的栈存储的路径来一层一层返回,就不执行你页面上 ...

  8. Jquery 监听浏览器前进后退

    jQuery(document).ready(function () { if (window.history && window.history.pushState) { $(win ...

  9. vue router路由跳转了,但是页面没有变(已解决)

    小白学习 router.js:两个组件之间跳转 但是路由变了,页面没有改变的原因是因为app.vue里面没有router-view(很关键)

随机推荐

  1. macOS webview编程

    好像是macOS10.10之后,以及iOS8之后,新出现的WKWebview组件就迅速的替代了Webview及UIWebView.后者的确存在一些无法解决的bug,诸如架构导致的速度缓慢和内存泄漏. ...

  2. Mybatis源码解析 - mapper代理对象的生成,你有想过吗

    前言 开心一刻 本人幼教老师,冬天戴帽子进教室,被小朋友看到,这时候,有个小家伙对我说:老师你的帽子太丑,赶紧摘了吧.我逗他:那你好好学习,以后给老师买个漂亮的?这孩子想都没想立刻回答:等我赚钱了,带 ...

  3. C# 判断用户是否对路径拥有访问权限

    如何获取当前系统用户对文件/文件夹的操作权限? 1.获取安全信息DirectorySecurity DirectorySecurity fileAcl = Directory.GetAccessCon ...

  4. VSTO中Word转换Range为Image的方法

    VSTO中Word转换Range为Image的方法 前言 VSTO是一套用于创建自定义Office应用程序的Visual Studio工具包,通过Interop提供的增强Office对象,可以对Wor ...

  5. 轻松搞定RocketMQ入门

    RocketMQ是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RocketMQ网络 ...

  6. Ext中setVersion和getVersion

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. H5移动端rem适配

    /** * 移动端自适应 */ <meta name="viewport" content="width=device-width,user-scalable=no ...

  8. 2018年12月8日广州.NET微软技术俱乐部活动总结

    吕毅写了一篇活动总结,写得很好!原文地址是:https://blog.walterlv.com/post/december-event-microsoft-technology-salon.html ...

  9. 广州.NET微软技术俱乐部 微信群有用信息集锦

    考虑到广州.NET微软技术俱乐部 微信群 十分活跃. 有用信息很有可能被淹没. 所以建立此贴. 首先群的活跃是十分重要的. 所以我是不可能把群搞得像技术论坛和github一样, 因为微信群的定位我在& ...

  10. JAVA forname classnotfoundexception 错误

    今日在使用Class.forName方法的时候报了错误: JAVA forname classnotfoundexception 原因是Class.forName(className);里面的clas ...