首页 > 其他分享 >介绍Vue router的history模式以及如何配置history模式

介绍Vue router的history模式以及如何配置history模式

时间:2023-07-07 22:45:56浏览次数:46  
标签:Vue URL 配置 模式 路由 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模式的优缺点

优点:

  1. 更友好的URL:history模式下的URL看起来更加整洁,没有特殊字符(如#),给用户提供了更好的阅读体验。
  2. 无刷新页面切换:使用history模式时,页面切换不会导致整个页面的刷新,仅仅改变URL,从而实现更加流畅的用户体验。
  3. 更好的SEO:搜索引擎对于history模式下的页面更容易进行抓取和索引,因为URL更加直观、语义化。
  4. 路由传参更方便:相比hash模式的URL传参,history模式下的传参更加直观简洁,参数可以直接通过URL的路径进行表示。

缺点:

  1. 服务器配置要求:使用history模式需要服务器的支持,因为URL改变时,要确保服务器能正确地展示相应的页面,需要进行一些额外的服务器配置。
  2. 兼容性问题:history模式在一些旧版本的浏览器(如IE9及以下)中不被支持,如果要兼容这些浏览器,可能需要降级为hash模式。
  3. 开发环境要求:当使用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;
  1. 服务器配置
       - 配置服务器,使得所有路由的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,URL,配置,模式,路由,history
From: https://www.cnblogs.com/azoux/p/17536230.html

相关文章

  • 一篇读懂React、vue框架的生命周期函数
    原文合集地址如下,有需要的朋友可以关注本文地址合集地址当涉及到前端框架时,React和Vue.js是两个非常受欢迎的选择。它们都提供了强大的工具和功能,帮助开发者构建交互式的、可扩展的应用程序。在这两个框架中,生命周期函数是一个重要的概念,它们允许我们在组件的不同阶段执行特......
  • TypeScript+Vue3
    TypeScriptAny类型和unknown顶级类型1.没有强制限定哪种类型,随时切换类型都可以我们可以对any进行任何操作,不需要检查类型2.声明变量的时候没有指定任意类型默认为any3.弊端如果使用any就失去了TS类型检测的作用4.TypeScript3.0中引入的unknown类型也被认为是top......
  • C语言单例模式
    单例模式的定义​ 单例模式的需求是保证在代码的整个运行期间,某种数据类型只有一个唯一的实例子。并且提供一个全局的访问接口。我们可以从两个角度来理解单例模式数据类型有且仅可以创建一个实例,编程人员不可以的随意的定义的此类型的实例。我们必须限制这种数据结构的创建。......
  • vue3.0 外部配置文件
    vue3.0外部配置文件,重点是打包后也可以修改配置参数 一、在public中创建static文件夹,在static文件夹中创建config.js文件config.js{"webSocketUrl":"http://192.168.1.5:5011/httpCli"}二、在man.js中使用 axios来读取存在app.config.globalProperties.$......
  • vue - v-model在组件上的应用(包含子传父)
    一、v-model的参数默认情况下,v-model在组件上都是使用modelValue作为prop,并以update:modelValue作为对应的事件。我们可以通过给v-model指定一个参数来更改这些名字:<MyComponentv-model:title="bookTitle"/>在这个例子中,子组件应声明一个titleprop,并通过触发upd......
  • Docker安装Nacos并以单例模式运行
    Nacos单例模式运行使用嵌入式数据库即可,这里不依赖于mysql。拉取指定版本Nacos镜像:dockerpullnacos/nacos-server:2.0.3查看镜像列表:dockerimages以单例模式启动:dockerrun-d--namenacos-p8848:8848-eMODE=standalonenacos/nacos-server:2.0.3查看容器列表......
  • vue项目跨域问题
    vue项目跨域问题一、vue项目直接调用第三方接口后,打包成dist部署到服务器后,提示404以及跨域问题解决方式:使用宝塔部署时:如图:在图中位置加入以下代码即可!!!location/api/{rewrite^.+api/?(.*)$/$1break;proxy_passhttp://122.112.215.133:9901/;......
  • 设计模式之类之间的关系和六大原则
    1类之间的关系类与类之间的关系大概有6种,要看懂UML图,首先需要了解这几种关系。1.1继承关系继承指的是一个类(称为子类,子接口)继承另外的一个类(成为父类,父接口)的功能,并可以增加它自己的新功能的能力。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或......
  • vue-slot插槽
    今天大致了解些vue插槽。在Vue.js中,插槽(slot)是一种机制,它允许你将内容插入到组件的特定位置。使用插槽,你可以在组件内定义一些可以被填充的占位符,然后在使用该组件时,将具体的内容插入到这些占位符中。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><......
  • C++ 设计模式之建造者模式
    设计模式之建造者模式建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其UML图如下:简单理解就是Builder中定义了创建Product各个部分的接口。ConcreteBuilder中具体实现了创建Product中的各个部分的接口,就是具体的建造者。Director......