【面试题】前端路由分类

news/2024/5/7 1:54:13/文章来源:https://blog.csdn.net/zx1041561837/article/details/129322906

0. 前言

在Web开发中,路由是指根据用户请求的URL地址,确定用户访问的页面资源、参数等,是前端开发中不可缺少的重要部分。Vue router中提供了两种路由模式,一种是hash模式,另一种是history模式。

1. Hash模式路由

Hash模式是默认的路由模式。在URL中加入"#",比如http://www.baidu.com/#/abc,#后面的内容就是路由地址。Hash模式有一个优点,就是兼容性比较好,因为它不需要后端支持,只要在前端将URL中的#后面的内容进行解析,就能获取到路由信息。当URL的hash部分发生变化时,会触发window.onhashchange事件,它可以用来监听浏览器的返回和前进按钮、手动修改URL的hash部分等操作。

在Web浏览器中,location对象表示当前文档的URL信息。一个典型的hash模式URL地址如下图所示,它由多个部分组成。

在这里插入图片描述

location对象的hash属性有以下特点:

  • 改变location.hash属性的值不会触发浏览器的页面重新渲染,这是SPA必需的特点。
  • hash值变化会触发页面跳转,即浏览器的前进、后退。
  • hash模式的路由不会提交到服务端。

2. History模式路由

在History模式下,URL不会像hash模式那样带有#号,而是一个正常的URL,例如:http://www.baidu.com/path/to/page。History模式是通过利用 HTML5 History API 实现的,可以在不刷新整个页面的情况下,动态改变当前URL地址和页面内容。可以通过window.onpopstate来监听路由的变化。

使用History模式需要后端的支持,因为它需要在服务器端进行配置。如果用户直接访问了一个History模式下的URL,而此时后端又没有相应的配置,就会出现404错误。Vue router提供了一个特殊的fallback选项,用于定义在服务器返回404错误页面时,应该返回什么样的页面。常见的做法是将fallback设为单页面应用的主页,以保证用户可以正确访问到页面。

HTML5 History API有如下的属性和方法:

方法/属性解释
history.pushState()向历史记录添加一个状态,并改变当前URL
history.replaceState()用新的状态替换当前状态,不会添加一个新的历史记录条目
history.go()加载历史记录中的某个特定页面
history.back()加载历史记录中的前一个页面,相当于点击浏览器的后退按钮
history.forward()加载历史记录中的下一个页面,相当于点击浏览器的前进按钮
history.length返回历史记录中的条目数

3. 如何选择路由模式

  • to B 的系统推荐用hash,简单易用,对url规范不敏感。
  • to C 的系统,可以考虑选择 H5 history,需要服务端支持。
  • 需要考虑成本和收益,尽量选择简单的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_77110.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python入门应该怎么学习

国外Python的使用率非常高,但在国内Python是近几年才火起来,Python正处于高速上升期市场对于Python开发人才的需求量急剧增加,学习Python的前景比较好。 Python应用领域广泛,意味着选择Python的同学在学成之后可选择的就业领域有…

前端整理 —— javascript 2

1. generator 详细介绍 generator 介绍 generator 是 ES6 提供的一种异步编程解决方案,在语法上,可以把它理解为一个状态机,内部封装了多种状态。执行generator,会生成返回一个遍历器对象。返回的遍历器对象,可以依次…

四、发布确认

1、发布确认原理 生产者将信道设置成 confirm 模式,一旦信道进入 confirm 模式,所有在该信道上面发布的消息都将会被指派一个唯一的 ID(从 1 开始),一旦消息被投递到所有匹配的队列之后,broker就会发送一个确认给生产者(包含消息…

SpringCloud之认识微服务

文章目录一、传统项目转型二、走进 SpringCloud三、微服务项目搭建3.1 创建一个 SpringBoot 项目3.2 创建三个 Maven 子工程3.3 为子工程创建 application.yml3.4 引入依赖3.5 数据库 建库建表3.6 编写业务提示:以下是本篇文章正文内容,SpringCloud系列学…

如何校招进BAT做产品经理

嗨,很高兴,以文字的形式和你见面。在校招中,我拿到了百度、京东、爱奇艺、新浪和去哪儿的产品经理校招offer,其中百度是special offer。在找实习的过程中,也拿到了爱奇艺、微信电影票、搜狐畅游、艺龙等公司的产品经理…

欢迎来到 BharatBox,这是一个以来自印度的知名艺术家和品牌为特色的文化元宇宙中心

通过 Brinc 的客户 Heftyverse 娱乐公司,将印度艺术家、电影制片厂、体育品牌和音乐公司聚集在这个全新虚拟中心。 The Sandbox 与 Brinc 的联营公司推出 BharatBox,这是一个全新的文化中心,由来自印度的娱乐、艺术和体育范畴的主要合作伙伴组…

知识图谱的介绍

知识图谱的由来 谷歌在2012年提出了知识图谱的概念,当时目的在于优化搜索引擎的返回结构,为用户提供更精确的结果。 知识图谱的定义 为了理解知识图谱,我们首先要明白信息与知识的概念。首先,信息表示的是外部的客观事实&#…

hadoop调优

hadoop调优 1 HDFS核心参数 1.1 NameNode内存生产配置 1.1.1 NameNode内存计算 每个文件块大概占用150byte,如果一台服务器128G,能存储的文件块如下 128 (G)* 1024(MB) * 1024(KB) * 1024(Byte) / 150 Byte 9.1 亿 1.1.2 Hadoop2.x 在Hadoop2.x中…

MVVM模式下如何正确【视图绑定+数据】

概述 我如何(不在后面的代码中使用代码)自动绑定到我想要的视图?据我了解,如果正确完成,这就是模式应该如何工作。我可以使用主窗口 xaml 中的代码实现这一切,我甚至正确创建了一个资源字典(因…

linux下nm,objdump和ldd三大工具使用

linux下进行C/C开发时经常需要使用nm&#xff0c;objdump&#xff0c;ldd工具来分析定位问题&#xff0c;本篇文章就对其做个总结&#xff1a; 1.测试程序 TestSo.h #pragma once #include <iostream>extern "C" int CTypeAdd(int x, int y); extern "…

Python 之网络式编程

一 客户端/服务器架构 即C/S架构&#xff0c;包括 1、硬件C/S架构&#xff08;打印机&#xff09; 2、软件B/S架构&#xff08;web服务&#xff09; C/S架构与Socket的关系&#xff1a; 我们学习Socket就是为了完成C/S的开发 二 OSI七层 引子&#xff1a;   计算机组成…

云HIS系统源码 医院his源码 云his源码

大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 &#xff0c;有演示 一、系统概述&#xff1a; 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子…

python学习——【第一弹】

前言 Python是一种跨平台的计算机程序设计语言&#xff0c;是ABC语言的替代品&#xff0c;属于面向对象的动态类型语言&#xff0c;最初被设计用于编写自动化脚本&#xff0c;随着版本的不断更新和语言新功能的添加&#xff0c;越来越多被用于独立的、大型项目的开发。 从这篇…

轮盘赌选择法

轮盘赌选择原理 轮盘赌选择法&#xff08;roulette wheel selection&#xff09;是最简单也是最常用的选择方法&#xff0c;在该方法中&#xff0c;各个个体的选择概率和其适应度值成比例&#xff0c;适应度越大&#xff0c;选中概率也越大。 从图中可以看出一等奖、二等奖、…

【Java集合框架】篇六:Collections工具类

Collections 是一个操作 Set、List 和 Map 等集合的工具类。 1。 常用方法 Collections 中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作&#xff0c;还提供了对集合对象设置不可变、对集合对象实现同步控制等方法&#xff08;均为static方法&#xff09;&…

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL&#xff1f;PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度&#xff0c;这是一个很好的选择&#xff0c;因为它比mysql-connector-python快。PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…

AntDB“超融合+流式实时数仓”,谈传统数据库与流计算的有机融合

&#xff08;一&#xff09; 前言 据统计&#xff0c;在信息化时代的今天&#xff0c;人们一天所接触到的信息量&#xff0c;是古人一辈子所能接收到的信息量的总和。当今社会中除了信息量“多”以外&#xff0c;人们对信息处理的“效率”和“速度”的要求也越来越高。譬如&am…

浅谈一下mysql8.0与5.7的字符集

修改字符集 修改步骤 在MySQL8.0版本之前&#xff0c;默认字符集为1atin1,utf8字符集指向的是utf8mb3。网站开发人员在数据库设计的时候往往会将编码修改为ut8字符集。如果遗忘修改默认的编码&#xff0c;就会出现乱码的问题。从MySQL8.0开始&#xff0c;数据库的默认编码将改…

王道C语言督学营OJ练习全解【24考研最新版】

前言 本篇博客是在博主参加王道408专业课前置课程-----C语言督学营的学习笔记&#xff0c;包含了从第一节课到最后一节课的所有OJ习题题解&#xff0c;文章中每一题都给出了详尽的代码&#xff0c;并在每一题的关键部位加上了注释&#xff0c;记录下来的目的是方便自己以后进行…

maven镜像源及代理配置

在公司使用网络一般需要设置代理&#xff0c; 我在idea中创建springboot工程时&#xff0c;发现依赖下载不了&#xff0c;原以为只要浏览器设置代理&#xff0c;其他的网络访问都会走代理&#xff0c;经过查资料设置了以下几个地方后工程创建正常&#xff0c;在此记录给大家参考…