返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue中如何把hash模式改为history模式
  • 324
分享到

Vue中如何把hash模式改为history模式

2024-04-02 19:04:59 324人浏览 独家记忆
摘要

目录把hash模式改为history模式关于路由hash和history模式hash模式history 模式二者对比把hash模式改为history模式 如上图所示非常简单 只需要

把hash模式改为history模式

如上图所示非常简单

只需要在文件router下的index.js里加上一个mode:'history’即可把hash模式改为history模式.这个时候url上面的#号就不会再存在了,这样就把url成功把hash模式改成history了

关于路由hash和history模式

hash模式

hash 就是指 url 后的 # 号以及后面的字符,

比如,Http://127.0.0.1:5500/test.html#/user,这里的hash值就是#/user。

hash 值的变化不会导致浏览器像服务器发送请求

hash 的改变会触发 hashChange 事件,浏览器的前进后退也能对其进行控制

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>hash模式的实现</title>
</head>
<body>
  <button id="myBtn">改变hash的值</button>
  <script>
    const myBtn = document.getElementById('myBtn');
      // 通过 onhashchange 监听hash值变化
    window.onhashchange = (e) => {
      console.log('老URL',e.oldURL);
      console.log('新URL',e.newURL);
      console.log('hash',location.hash);
    }
  </script>
</body>
</html>

上面是通过 on 来监听事件,其实也可以用

window.addEventListener("hashchange", funcRef, false);

改变hash的三种方式:

第一种:手动在导航栏中修改

控制台的输出

第二种方式:手动点击前进后退按钮

这里是点击了后退按钮,从 #/user 后退到了 #/

第三种方式:通过js代码修改

给按钮增加监听函数,当点击按钮时,进行路由改变。

  <script>
    const myBtn = document.getElementById('myBtn');
    window.onhashchange = (e) => {
      console.log('老URL',e.oldURL);
      console.log('新URL',e.newURL);
      console.log('hash',location.hash);
    }
    // 增加监听函数
    myBtn.addEventListener('click',() => {
      location.href = '#/user';
    })
  </script>

起初,路由位于http://127.0.0.1:5500/test.html#/,

然后点击按钮

注:Location对象用于表示window上当前链接到的URL信息。

  • href: 当前window对应的超链接URL, 整个URL;
  • hash: 哈希值;
  • pathname:访问页面;

用一个网址来演示location的属性

//http://127.0.0.1:8001/01-hash.html?a=100&b=20#/aaa/bbb
location.protocal // 'http:'
localtion.hostname // '127.0.0.1'
location.host // '127.0.0.1:8001'
location.port //8001
location.pathname //'01-hash.html'
location.serach // '?a=100&b=20'
location.hash // '#/aaa/bbb'

对于href属性

history 模式

默认情况下, 路径的改变使用的URL的hash.

如果使用history模式,在配置路由规则时,加入"mode: ‘history’".

//main.js文件中
const router = new VueRouter({
  mode: 'history',
  routes: [...]
})

history 模式,每访问一个页面都要发起网络请求,每个请求都需要服务器进行路由匹配、数据库查询、生成HTML文档后再发送响应给浏览器,这个过程会消耗服务器的大量资源,给服务器的压力较大。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>history模式的实现</title>
</head>
<body>
  <button id="myBtn">改变hash的值</button>
  <script>
    const myBtn = document.getElementById('myBtn');
    window.addEventListener('DOMContentLoaded',() => {
      //页面DOM加载完毕后打印出页面的路径
      console.log('path: ',location.pathname);
    })
    myBtn.addEventListener('click',() => {
      const state = {name:'user'};
      history.pushState(state, '', 'user');
      console.log('切换路由到了','user');
      console.log('path: ',location.pathname);
    })
  </script>
</body>
</html>

起初路由位于http://127.0.0.1:5500/test.html,

当点击了按钮之后,路由变成了http://127.0.0.1:5500/user。

history 模式

利用了 HTML5 History Interface 中新增的 pushState() 和 replaceState() 方法。

history.pushState();         // 添加新的状态到历史状态栈
history.replaceState();      // 用新的状态代替当前状态
history.state                // 返回当前状态对象
  • history.pushState() 在保留现有历史记录的同时,将 url 加入到历史记录中。
  • history.replaceState() 会将历史记录中的当前页面历史替换为 url。

由于 history.pushState() 和 history.replaceState() 可以改变 url 同时,不会刷新页面,所以在 HTML5 中的 histroy 具备了实现前端路由的能力。

这两个方法有个共同的特点:当调用他们修改浏览器历史记录栈后,虽然当前 URL 改变了,但浏览器不会刷新页面,这就为单页应用前端路由“更新视图但不重新请求页面”提供了基础。

history

在修改 url 后,虽然页面并不会刷新,但我们在手动刷新,或通过 url 直接进入应用的时候, 服务端是无法识别这个 url 的,会报 404 问题。

因为我们是单页应用,只有一个 html 文件,服务端在处理其他路径的 url 的时候,就会出现404的情况。 所以,如果要应用 history 模式,需要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回单页应用的 html 文件。

popstate

在history模式中与hash模式的hashchange对应的是popState

popstate是在浏览器回退前进或者js的 back() Go() forward()方法的时候才会触发。

    //监听 popstate 事件
    window.onpopstate = (e) => {
      console.log('onpopstate', e.state, location.pathname);
    }

二者对比

1.从兼容角度分析。

hash 可以兼容到 IE8,history 只能兼容到 IE10。

2.从网络请求的角度分析。

使用 hash 模式,地址改变时通过 hashchange 事件,只会读取哈希符号后的内容,并不会发起任何网络请求。

history 模式,每访问一个页面都要发起网络请求,每个请求都需要服务器进行路由匹配、数据库查询、生成HTML文档后再发送响应给浏览器,这个过程会消耗服务器的大量资源,给服务器的压力较大。

3.服务器配置角度分析。

hash 不需要服务器任何配置。

history 进行刷新页面时,无法找到url对应的页面,会出现 404 问题。如果要应用 history 模式,需要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回单页应用的 html 文件。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Vue中如何把hash模式改为history模式

本文链接: https://lsjlt.com/news/165342.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Vue中如何把hash模式改为history模式
    目录把hash模式改为history模式关于路由hash和history模式hash模式history 模式二者对比把hash模式改为history模式 如上图所示非常简单 只需要...
    99+
    2024-04-02
  • vue-router中hash模式与history模式的区别
    vue-router有两种模式 hash模式 history模式 1.单页面应用 单页应用 1.只有一个html文件,整个网站的所有内容都在这一个ht...
    99+
    2024-04-02
  • vue中vue-Router如何将默认hash模式修改为history需要做的修改
    这篇文章主要介绍了vue中vue-Router如何将默认hash模式修改为history需要做的修改,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解...
    99+
    2024-04-02
  • Vue路由模式中的hash和history模式详细介绍
    目录1. 路由概念2. hash模式3. history路由模式1. 路由概念 路由的本质就是一种对应关系,根据不同的URL请求,返回对应不同的资源。那么url地址和真实的资源之间就...
    99+
    2024-04-02
  • Vue Router路由hash模式与history模式详细介绍
    目录一、前言二、hash模式三、history模式一、前言 对于hash模式和history模式,最直接的区别就是地址栏带不带"#"号了。 vue脚手架搭建的项目...
    99+
    2024-04-02
  • Vue中Router路由两种模式hash与history详解
    hash 模式 (默认) 工作原理: 监听网页的hash值变化 —> onhashchange事件, 获取location.hash 使用 URL 的 hash 来模拟一个完整...
    99+
    2024-04-02
  • vue-router如何实现history模式配置
    目录vue-router history模式配置一:概述二、实现history模式需要怎样配置mode:“history“的作用vue-router hist...
    99+
    2024-04-02
  • HTML5中History模式如何实现
    这篇文章将为大家详细讲解有关HTML5中History模式如何实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、history.pushStatehistory.pu...
    99+
    2024-04-02
  • Vue路由history模式如何解决404问题
    小编给大家分享一下Vue路由history模式如何解决404问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!问题背景:vue-...
    99+
    2024-04-02
  • vue-router history模式服务器端如何配置
    这篇文章主要介绍了vue-router history模式服务器端如何配置的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue-router history模式服务器端如何配置文章都会有所收获,下面我们一起来看...
    99+
    2023-07-04
  • vue多页面项目中路由如何使用history模式
    这篇文章给大家分享的是有关vue多页面项目中路由如何使用history模式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。如何解决有一天看webpack文档的时候,突然看到了his...
    99+
    2024-04-02
  • vue-router怎么实现history模式配置
    本文小编为大家详细介绍“vue-router怎么实现history模式配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue-router怎么实现history模式配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-02
  • oracle 如何更改为归档模式
    归档:就是将重做日志归档起来,重新写入新的重做日志文件中,日志切换的过程叫做log  swith,切换时会产生检查点。检查点以前的所有数据,已经全部归档了。oracle数据库中最少有两个重做日志组...
    99+
    2024-04-02
  • vue-cli history模式如何实现tomcat部署报404的解决方式
    小编给大家分享一下vue-cli history模式如何实现tomcat部署报404的解决方式,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!vue-cli开发过程中路由#不好看,去掉可使用...
    99+
    2024-04-02
  • Vue单页式应用Hash模式下如何实现微信分享
    这篇文章将为大家详细讲解有关Vue单页式应用Hash模式下如何实现微信分享,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:前端微信分享的基本步骤:一.绑定域名:先...
    99+
    2024-04-02
  • Vue路由History mode模式中页面无法渲染如何解决
    本篇内容主要讲解“Vue路由History mode模式中页面无法渲染如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue路由History mode模式中页面无法渲染如何解决”吧!Vu...
    99+
    2023-07-04
  • vue-cli如何打包使用history模式的后端配置
    这篇文章主要介绍vue-cli如何打包使用history模式的后端配置,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!apache的配置这是windows下的在httpd-vhosts...
    99+
    2024-04-02
  • 云服务器怎么部署vue history模式
    本篇内容主要讲解“云服务器怎么部署vue history模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“云服务器怎么部署vue history模式”吧!想要去掉地址中的 # 也不难,主要分两部...
    99+
    2023-07-04
  • windows硬盘模式ide模式如何修改
    这篇文章主要介绍了windows硬盘模式ide模式如何修改的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇windows硬盘模式ide模式如何修改文章都会有所收获,下面我们一起来看看吧。硬盘模式ide模式修改教程...
    99+
    2023-07-01
  • 如何在线将传统模式复制改为GTID复制模式
    这篇文章将为大家详细讲解有关如何在线将传统模式复制改为GTID复制模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.在每一台服务器上设置ENFORCE_GTID_CO...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作