Vue前端路由hash与history差异深入了解

Vue前端路由hash与history差异深入了解

前言

随着前端技术的发展,单页面应用(SPA)越来越多地出现在我们的生活中,而Vue作为目前较为流行的前端框架,其前端路由功能也越来越重要。本文将详细讲解Vue前端路由中hash与history两种模式的差异,以及它们的使用注意事项。

hash模式

在vue-router中,默认使用的是hash模式。hash模式会将URL中#后的字符作为路由地址使用。

例如,当前URI为https://www.example.com,且应用的路由地址为/home时,hash模式下的URL为https://www.example.com/#/home

在hash模式下,通过修改location.hash的值,我们可以实现前端路由的跳转,例如:

// 跳转到/home页面
location.hash = '#/home';

值得注意的是,当我们使用hash模式路由时,浏览器不会向服务器发送请求。因此,一个明显的优势是我们不需要服务器支持URL重定向或django等框架的的特定设置。但是,URL带有#号,看起来并不友好。

history模式

history模式中,vue-router会使用浏览器的history API来实现前端路由。这种模式下的URL更友好,不存在hash的问题。例如:我们访问URI为https://www.example.com,且应用的路由地址为/home时,history模式下的URL为https://www.example.com/home

在history模式下,我们可以使用router.push()来实现路由跳转:

// 跳转到/home页面
router.push('/home');

在history模式下,我们需要在服务器端配置,以保证刷新浏览器的时候不会404。在Nginx中,我们可以添加以下配置实现:

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

这个是由于浏览器在刷新的时候,会根据URL路径从服务器请求资源,因为history模式下的URL跟真实的URI是一样的,不做任何服务器端配置会直接返回404错误。而使用上面的Nginx配置,服务器会先尝试加载URL中指定的文件,如果没有找到,则返回index.html,这样就保证了单页面应用的正常运行。

类似的,如果你使用Apache作为服务器,在.htaccess文件中可以加入以下配置实现:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.html [L]
</IfModule>

综合比较

hash模式 history模式
URL友好度 较差 较好
是否向服务器发送请求
服务器端配置 不需要 需要
兼容性 更好 较差

示例

示例1

在Vue项目中,我们可以通过以下代码来判断当前应用的路由模式:

if (window.history && window.history.pushState) {
  // 支持history模式
  router.mode = 'history';
} else {
  // 不支持history模式,则使用hash模式
  router.mode = 'hash';
}

示例2

在Nginx配置文件中添加上述Nginx配置,以支持history模式下的刷新。

server {
    listen 80;
    server_name example.com;

    root /path/to/your/root;

    index index.html;

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

当浏览器以history模式的URL访问网站时,Nginx服务器会尝试获取对应的路径,如果存在则返回文件;否则,返回index.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue前端路由hash与history差异深入了解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Vue-Router基础学习笔记(小结)

    下面是针对“Vue-Router基础学习笔记(小结)”的完整攻略: Vue-Router基础学习笔记(小结) 什么是Vue-Router Vue-Router是Vue.js的路由管理库,专门提供路由功能实现SPA(Single Page Application, 单页应用)。它去掉了传统的同步方式,采用异步加载组件,一定程度上提高了web应用的速度和流畅度。…

    JavaScript 2023年6月11日
    00
  • Ajax 对象 包含post和get两种异步传输方式

    为了详细讲解Ajax对象,我们需要明确以下几个概念: 异步传输:传输数据时不会阻塞页面,用户可以继续进行其他操作。 GET方法:通过URL传输参数,以键值对的形式发到服务端。 POST方法:将参数放在HTTP请求的body中发送到服务端。 Ajax对象是XMLHttpRequest对象的一个实例,可以通过JavaScript代码创建,在实例化完成后使用其op…

    JavaScript 2023年6月11日
    00
  • Window.Open打开窗体和if嵌套代码

    下面我就来详细讲解一下“Window.Open打开窗体和if嵌套代码”的完整攻略。 Window.Open打开窗体 Window.Open 是一种在浏览器中打开新窗口的方法。它有几个参数可以设置:新窗口的 URL 地址、窗口大小和位置、是否允许调整窗口大小、是否允许工具栏和状态栏等。 下面是一个示例,展示如何通过 Window.Open 打开一个新窗口: &…

    JavaScript 2023年6月11日
    00
  • JavaScript本地储存:localStorage、sessionStorage、cookie的使用

    JavaScript本地储存:localStorage、sessionStorage、cookie的使用 什么是本地储存? 在网站开发中,需要将一些数据临时储存起来。本地储存技术就是把数据储存在客户端浏览器中,这样就可以避免跨页面、跨域、跨浏览器的问题,提高网站的性能和用户体验。本地储存技术通常包括localStorage、sessionStorage和Co…

    JavaScript 2023年6月10日
    00
  • 详解如何将 Vue-cli 改造成支持多页面的 history 模式

    下面是如何将 Vue-cli 改造成支持多页面的 history 模式的攻略。具体步骤如下: 一、创建多页面应用 首先需要在 Vue-cli 中创建多页面应用。在 src 目录下新建多个 .html 文件,比如 index.html、about.html 等。在 src 目录下还需要新建多个 .js 文件,比如 index.js、about.js 等,这些 …

    JavaScript 2023年6月11日
    00
  • C#基于正则表达式抓取a标签链接和innerhtml的方法

    下面是详细的讲解 C#基于正则表达式抓取a标签链接和innerhtml的方法的完整攻略。 步骤一:定位要抓取的页面 首先你需要确定你要抓取的页面,一般情况下是从一个 URL 开始。你可以使用 C# 的网络请求库来请求这个 URL,我们以 System.Net.WebClient 为例: var client = new System.Net.WebClien…

    JavaScript 2023年6月10日
    00
  • BootstrapValidator验证用户名已存在(ajax)

    让我来为你详细讲解“BootstrapValidator验证用户名已存在(ajax)”的完整攻略。 标题 首先,我们需要给这个攻略起个标题。根据内容,可以考虑起名为“BootstrapValidator验证用户名已存在(ajax)”。 说明 为了实现这个功能,我们需要用到以下内容: BootstrapValidator插件 Ajax请求来检查用户名是否已存在…

    JavaScript 2023年6月10日
    00
  • vue3.0之Router的使用你了解吗

    当涉及到Vue.js应用的路由管理时,Vue.js社区提供了许多路由插件,其中最受欢迎的是Vue Router。Vue Router是Vue.js官方支持的路由管理器,它能够让你基于Vue.js创建SPA(单页应用)非常方便。 Vue Router 3.0相对于Vue Router 2.0的主要更新内容有以下几点: 路由器构造函数改为createRouter…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部