vue使用history模式及相关问题处路由

路由使用history模式

vue 默认使用的是hash模式,在这种模式下,所有的路由地址都会在端口号后加入一个#号。
使用这种模式:
一是url中带有#不是很美观
二是在某些特殊场景下无法达到需求
这时可以开启vue的history模式,可以消除这个#号

根据官方文档,秩序要在新建router时如下配置即可开启history模式

const router = new Router({mode: 'history', routes: routes});

在本地开发时,没有什么影响,但部署服务时,需要修改服务器配置。不然就会出404或者静态资源加载不出来的问题。我使用的是nginx代理,官方提供了以下的配置方案
在nginx.config中添加以下代码:

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

修改之后,就不会出现404问题,但如果使用了二级路由,访问路由和嵌套路由页面,显示正常,但是刷新页面的时候,嵌套路由页面就出异常了

Uncaught SyntaxError: Unexpected token '<'

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

这里我们将打包的配置由相对路径改为绝对路径,修改config下的index.js
在这里插入图片描述

assetsPublicPath: './'修改为assetsPublicPath: '/'

build: {  
// Template for index.html  index: path.resolve(__dirname, '../dist/index.html'),  
// Paths  
assetsRoot: path.resolve(__dirname, '../dist'), 
assetsSubDirectory: 'static',  
assetsPublicPath: '/',

路由能够正常跳转,并且刷新也不再报错
参考连接:
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法

Logo

Vue社区为您提供最前沿的新闻资讯和知识内容

更多推荐