介绍Vue router的history模式以及如何配置history模式
引言
Vue router给我们提供了两种路由模式,分别是hash模式和history模式。其中默认是使用hash模式,即URL中带有一个#符号,但是处于业务或个人喜爱的差别,Vue router也提供了history模式。但是由于Vue是单页SPA应用,所以每个路由并没有对应的html文件。
什么是history模式
history模式特点
- history模式使用浏览器的history API来管理路由状态,而不是依赖于URL中的哈希。
- 在history模式下,URL看起来更加整洁,没有#符号。例如,http://example.com/user/profile。
- history模式可以在不刷新整个页面的情况下,通过改变URL来切换页面,实现更加流畅的用户体验
history模式的优缺点
优点:
- 更友好的URL:history模式下的URL看起来更加整洁,没有特殊字符(如#),给用户提供了更好的阅读体验。
- 无刷新页面切换:使用history模式时,页面切换不会导致整个页面的刷新,仅仅改变URL,从而实现更加流畅的用户体验。
- 更好的SEO:搜索引擎对于history模式下的页面更容易进行抓取和索引,因为URL更加直观、语义化。
- 路由传参更方便:相比hash模式的URL传参,history模式下的传参更加直观简洁,参数可以直接通过URL的路径进行表示。
缺点:
- 服务器配置要求:使用history模式需要服务器的支持,因为URL改变时,要确保服务器能正确地展示相应的页面,需要进行一些额外的服务器配置。
- 兼容性问题:history模式在一些旧版本的浏览器(如IE9及以下)中不被支持,如果要兼容这些浏览器,可能需要降级为hash模式。
- 开发环境要求:当使用history模式时,需要在开发环境中配置一个服务器来模拟URL的请求,以确保路由正常运行,相比hash模式需要更多的配置。
如何配置Vue Router使用history模式
- 首先我们需要创建一个Vue项目
- 安装Vue Router
npm i vue-router
- 在Vue项目中配置Vue Router使用history模式
import Vue from 'vue';
import VueRouter from 'vue-router';
Vue.use(VueRouter);
const router = new VueRouter({
mode: 'history',
routes: [
// 路由配置
]
});
export default router;
- 服务器配置
- 配置服务器,使得所有路由的URL都指向入口页面,我们用nginx配置举例:
server {
listen 80;
server_name your_domain.com;
root /path/to/your/vue_app/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
# 在以上配置中,需要进行以下调整:
# 1. server_name:将your_domain.com替换为您的域名。
# 2. root:将/path/to/your/vue_app/dist替换为您的Vue应用的编译输出目录。
# 3. index:确保index.html是您的Vue应用的入口页面。
# 配置解释:
# • location /:此处表示对所有的请求都生效。
# • try_files $uri $uri/ /index.html:当请求的文件或目录不存在时,将请求重定向到index.html。这使得所有的路由请求都指向了Vue应用的入口页面,使得应用能够正确地处理动态路由。
处理404页面
// 在路由配置中定义一个名为NotFound的路由
const routes = [
// 其他路由配置...
{ path: '/404', name: 'NotFound', component: NotFoundComponent },
{ path: '*', redirect: '/404' }
]
// 创建Vue Router实例并将路由配置应用于它
const router = new VueRouter({
mode: 'history',
routes
})
// 导航守卫用于捕获404错误
router.beforeEach((to, from, next) => {
// 如果目标路由不存在,重定向到404页面
if (to.matched.length === 0) {
next('/404');
} else {
next();
}
})
配置publicPath
如果你希望你的Vue应用打完包以后,所有路由的前缀都加上/v1/test,那么你需要对原有的配置做一下修改
vue.config.js
publicPath这里需要判断一下是否为生产环境,如果是生产环境,我们需要加上前缀,这样在读取js、css等文件时才能访问到正确的路径。如果是开发环境,基本URL配置为'/'即可。在开发环境中,我们的应用通常运行在一个本地的开发服务器上(例如:localhost:8080),而不是真实的生产环境服务器(例如:https://www.example.com)。因此,'/'可以作为根路径来访问我们的应用,而不需要添加任何前缀。
module.exports = {
// 部署应用包的基本URL
publicPath: process.env.NODE_ENV === 'production' ? '/v1/test/' : '/',
devServer: {
port: 8080,
open: true,
proxy: {}
}
}
nginx配置
server {
listen 80;
server_name your_domain.com;
root /path/to/your/vue_app/dist;
index index.html;
location /v1/test { # 这里location需要加上/v1/test
try_files $uri $uri/ /index.html;
}
}
介绍Vue router的history模式以及如何配置history模式的更多相关文章
- 解决IE报错[vue router]Failed to resolve async component default:strict 模式下不允许分配到只读属性
之前遇到过一个奇怪的问题,在其他浏览器下一切正常,但在万恶的IE下,却一直不行. 具体问题场景就是:比如orderDetail页面出现问题,那么只要是路由跳转的,点第1次无法跳转,必须得点第2次才可以 ...
- vue router的浏览器跳转行为
最近做的项目中,涉及vue router 路由操作,其操作方法不同,产生的行为亦不同.本文通过对比实验,对其行为进行实验对比及总结,避免混淆. vue router的单页跳转的history模式,类似 ...
- vue router使用query和params传参的使用
传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,希望可以帮到大家. Vue ...
- (转)vue router 如何使用params query传参,以及有什么区别
写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...
- 04 Vue Router路由管理器
路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...
- vue router 如何使用params query传参,以及有什么区别
写在前面: 传参是前端经常需要用的一个操作,很多场景都会需要用到上个页面的参数,本文将会详细介绍vue router 是如何进行传参的,以及一些小细节问题.有需要的朋友可以做一下参考,喜欢的可以点波赞 ...
- Vue Router路由管理器介绍
参考博客:https://www.cnblogs.com/avon/p/5943008.html 安装介绍:Vue Router 版本说明 对于 TypeScript 用户来说,vue-router@ ...
- Vue路由配置history模式
我的博客: https://github.com/Daotin/fe-notes/issues vue需要node.js吗? 你可以用 script 标签的形式引入vue.min.js 这样的,不需要 ...
- Apache支持Vue router使用 HTML5History 模式
一.前言 前端Vue router 使用history模式,URL会比hash模式好看,这种模式要玩好,还需要后端配置支持,否则会报404错误. 注:1.前端代码省略. 2.此处后台使用Apache服 ...
- vue router mode 设置"hash"与"history"的区别
router官网的说明如下: ********************************************我是官网说明分隔符--开始**************************** ...
随机推荐
- 全网最详细中英文ChatGPT-GPT-4示例文档-食谱智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/curl命令源代码,小白也能学)
目录 Introduce 简介 setting 设置 Prompt 提示 Sample response 回复样本 API request 接口请求 python接口请求示例 node.js接口请求示 ...
- kettle从入门到精通 第十一课 kettle javascript 解析json数组
1.json步骤虽然可以解析json数组,但是不够灵活.通过javascript步骤来解析json数组比较灵活,且可以按照需要组装数据流转到下个步骤. 1)步骤名称:可以自定义 2)Transform ...
- 【Zookeeper】(一)概述与内部原理
Zookeeper概述 1 概述 Zookeeper是一个开源的.分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式的角度来看,是一个基于观察者模式设计的分布式服务管 ...
- Karmada v1.5发布:多调度组助力成本优化
摘要:在最新发布的1.5版本中,Karmada 提供了多调度组的能力,利用该能力,用户可以实现将业务优先调度到成本更低的集群,或者在主集群故障时,优先迁移业务到指定的备份集群. 本文分享自华为云社区& ...
- Jenkins-Email Extension Plugin邮件配置
前言:此文为 Jenkins 2.346 版本 一.配置准备 1.安装 Email Extension Plugin 插件 二.配置邮件 Email Extension Plugin 部分 1.进入系 ...
- Node.js躬行记(28)——Cypress自动化测试实践
最近在研究如何提升项目质量,提炼了许多个用于自测的测试用例,但是每次修改后,都手工测试,成本太高,于是就想到了自动化测试. 在一年前已将 Cypress 集成到管理后台的项目中,不过没有投入到实践中. ...
- 2022-08-16:绳子总长度为M, 100 -> M, (6, 100) (7,23) (10,34) -> arr, 每一个长度的绳子对应一个价格,比如(6, 10)表示剪成长度为6的绳子,对应
2022-08-16:绳子总长度为M, 100 -> M, (6, 100) (7,23) (10,34) -> arr, 每一个长度的绳子对应一个价格,比如(6, 10)表示剪成长度为6 ...
- 2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态。如何让容器处于running状态?
2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态.如何让容器处于running状态? 答案2022-02-08: 加 ...
- 2021-11-25:给定两个字符串s1和s2,返回在s1中有多少个子串等于s2。来自美团。
2021-11-25:给定两个字符串s1和s2,返回在s1中有多少个子串等于s2.来自美团. 答案2021-11-25: 改写kmp算法. next数组多求一位. 比如:str2 = aaaa, 那么 ...
- Selenium - 浏览器配置(1) - 忽略证书错误提示
Selenium - 浏览器配置 忽略证书错误提示 有时候我们访问一些地址,会提示证书私密连接告警信息如下: 如果我们每次要点击高级来忽略私密连接,那就很麻烦: 在谷歌浏览器可以增加忽略证书错误问题, ...