vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法


Posted in Javascript onJanuary 25, 2018

解决vue-router嵌套路由(子路由)在history模式下刷新无法渲染页面的问题,具体内容如下

一. 异常描述

本来使用的是vue-router的hash模式,但是hash模式下url需要带“#”符号,不仅看起来不舒服,而且有些场景下是会破坏路由中的"#"(微信分享页面就会把"#"后边的内容处理掉),所以就需要使用history模式,然后就让后端改下nginx配置:

location / { try_files $uri $uri/ /index.html; }

vue-router使用history模式+使用嵌套路由:

const router = new Router({
 mode: 'history',
 routes: [
  {
   path: '/',
   component: mall,
   name: 'mall'
  },
  ……

  //我的银行卡
  {
   path: '/myCard',
   meta: { requireAuth: true },
   component: myCard,
   name: 'myCard',
   children:[
   { path:'', component: card},
   { path:'add', component: add}
   ]
  }
   ……
 ]
})

访问路由和嵌套路由页面,显示正常,但是刷新页面的时候,嵌套路由页面就出异常了:

vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

页面样式全乱了,看下页面请求加载的静态文件,所有静态文件都是404;

vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

二. 异常解析

1. 看下官方文档对嵌套路由的说明:

vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

2. 再看之前的异常页面,看来我们的父路由成了根目录了看下文件路径了:

vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

3. 看下我们引入这些异常文件,是在index.html文件中直接引用的,也就是在根路径下引入的。之前的hash模式下,根路径是不会变的,所以我们在index.html文件中直接引入这些静态文件,是可行的,但是使用history模式后,根路径就不固定了。那么这种引入方式就不可行了,所以才造成了上边出现的页面无法渲染的问题:

vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

三. 解决问题

这里有点尴尬,先考虑的主Vue中以Import的方式引入静态样式文件,的确可行,但是最后发现,直接修改index.html文件中的静态文件引入路径就OK了:

修改前:

<script src="./static/js/stomp.js"></script>

修改后

<script src="/static/js/stomp.js"></script>

四. 原理

./ 是指用户所在的当前目录(相对路径);

/ 是指根目录(绝对路径,项目根目录),也就是项目根目录;

对于hash模式,根路径是固定的,就是项目的根目录,但是history模式下,以/开头的嵌套路径会被当作根路径,所以使用“./”引入文件,就会找不到文件了,因为文件本身就是在项目根目录下的,并不在嵌套路径这个目录下。

总结,无论hash模式还是history模式,可以直接使用“/”从项目根目录引入静态文件。

PS:之前一段时间就遇到过这个问题,百度了好久,发现很少有人问这个问题,有一个也没人回答。也问了好些前端大神,还是没能解决这个问题。也许是平时写惯了“./” 和“../”这些开头的路径了吧,并没有注意到静态文件引入方式的问题,折腾了好些方法,最后很尴尬的发现,其实问题很简单,只是对框架的底层了解不透彻罢了!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中检测变量的类型的代码
Dec 28 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
May 06 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
May 17 Javascript
Jquery时间验证和转换工具小例子
Jul 01 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
Aug 01 Javascript
JS实现新浪微博效果带遮罩层的弹出框代码
Oct 12 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
Jun 02 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
Sep 05 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
Jul 31 Javascript
在vue里面设置全局变量或数据的方法
Mar 09 Javascript
微信小程序实现的日期午别医生排班表功能示例
Jan 09 Javascript
Vue中实现回车键切换焦点的方法
Feb 19 Javascript
vue通过路由实现页面刷新的方法
Jan 25 #Javascript
jQuery zTree搜索-关键字查询 递归无限层功能实现代码
Jan 25 #jQuery
JavaScript实现职责链模式概述
Jan 25 #Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
Jan 25 #jQuery
解决Jquery下拉框数据动态获取的问题
Jan 25 #jQuery
vue引入新版 vue-awesome-swiper插件填坑问题
Jan 25 #Javascript
vue better-scroll插件使用详解
Jan 25 #Javascript
You might like
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
js 内存释放问题
2010/04/25 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
nodejs中art-template模板语法的引入及冲突解决方案
2017/11/07 NodeJs
AngularJS实现的简单拖拽功能示例
2018/01/02 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
2020/05/23 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
原生js中运算符及流程控制示例详解
2021/01/05 Javascript
[01:03:47]VP vs NewBee Supermajor 胜者组 BO3 第一场 6.5
2018/06/06 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
django数据库migrate失败的解决方法解析
2018/02/08 Python
Django 开发环境配置过程详解
2019/07/18 Python
使用Python调取任意数字资产钱包余额功能
2019/08/15 Python
mac在matplotlib中显示中文的操作方法
2020/03/06 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
Alpine安装Python3依赖出现的问题及解决方法
2020/12/25 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
校运会入场式解说词
2014/02/10 职场文书
我的画教学反思
2014/04/28 职场文书
四风问题个人剖析材料
2014/10/07 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技