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版代码高亮
Jun 26 Javascript
javascript函数以及基础写法100多条实用整理
Jan 13 Javascript
Javascript查询DBpedia小应用实例学习
Mar 07 Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
动态加载JavaScript文件的两种方法
Apr 22 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
Node.js中多进程模块Cluster的介绍与使用
May 27 Javascript
Javascript实现从小到大的数组转换成二叉搜索树
Jun 13 Javascript
Javascript实现异步编程的过程
Jun 18 Javascript
vue新vue-cli3环境配置和模拟json数据的实例
Sep 19 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
Jun 03 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
PHP 选项及相关信息函数库
2006/12/04 PHP
php5 non-thread-safe和thread-safe这两个版本的区别分析
2010/03/13 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
vue 中filter的多种用法
2018/04/26 Javascript
微信小程序实现通过双向滑动缩放图片大小的方法
2018/12/30 Javascript
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
JavaScript实现alert弹框效果
2020/11/19 Javascript
python海龟绘图实例教程
2014/07/24 Python
Python贪心算法实例小结
2018/04/22 Python
Python基于opencv的图像压缩算法实例分析
2018/05/03 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
Python创建空列表的字典2种方法详解
2020/02/13 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
就业推荐自我鉴定
2013/10/06 职场文书
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
小学教师师德演讲稿
2014/05/06 职场文书
岗位说明书怎么写
2014/07/30 职场文书
法定代表人身份证明书
2014/09/10 职场文书
法制主题班会教案
2015/08/13 职场文书
2016父亲节感恩话语
2015/12/09 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers