关于路由, 我好奇的那些点

2023-10-27

最近解锁了一个拯救自我的新技能,就是学习之前,可以先观察下知识时间线,相关人物,以及其他背景等,让那些规则不再变得辣么无聊。

什么是路由?
通俗的讲就是根据不同的url展示不同页面或者内容。

路由的发展阶段?
路由的概念最开始是在后端出现的,在以前前后端不分离的时候,由后端来控制路由。

后端路由:

后端路由,又称服务器路由。服务器的静态页面内容的获取,映射函数可以看做是文件的读取操作。对于动态页面的获取,映射函数可能就是数据库读取操作,或是将数据进行处理,然后在服务端使用相应的模板渲染好页面,接着返回渲染完毕的页面。

这种方式在早期的前端开发中非常普遍,但是存在用户体验不好,服务器压力大等问题,也就给后来出现的前端路由提供了一片天地。

前端路由:

提到前端路由,便联想到单页应用,立马搜索单页应用什么时候出现的。单页应用最早由微软提出,同时推出了Knockoutjs,搜索得知KnockoutJs只是一个MVVM框架,其路由机制需要借助其他一些类库,如Asp.net接收客服端http请求的URL找到对应的映射函数,然后将函数的返回值发送给客户端。将MVVM及单页面应用发扬光大的Google推出了Angularjs。

前端路由的两种模式
目前前端的路由实现主要是两种方式,这两种方式都是基于浏览器自身的特性,两种方式分别是 hash路由 & history路由

hash路由:
hash值指的url#后面的字符串,hash值的改变只影响浏览器行为,不会导致浏览器向服务器发送请求,因此在h5的history模式出现之前,都是通过hash控制路由。

window对象提供了onhashchange事件来监听hash值的改变,一旦url中的hash值发生改变,便会触发该事件

  <div id="nav">
    <a href="#/page1">page1</a>
    <a href="#/page2">page2</a>
    <a href="#/page3">page3</a>
  </div>
  <div id="container"></div>

 

    let hashValue;
    let container = document.getElementById('container');
    window.onload = () => { checkHash()} // 初始化界面

    window.addEventListener('hashchange', checkHash) // hashchange检测hash值的改变

    function checkHash() {
      hashValue = window.location.hash
      container.innerHTML = hashValue === '#/page1' ? '页面一' : hashValue === '#/page2' ? '页面二' : '页面三'
    }
 

 

history路由:
在html5出现之前,history对象就只有简单的前进、后退、跳转等方法,HTML5标准发布h后,多了两个 API,pushState 和 replaceState,通过这两个 API 可以改变 url 地址且不会发送请求。同时还有popstate事件。通过这些就能用另一种方式来实现前端路由了。

<div id="nav">
  <a href="/page1">page1</a>
  <a href="/page2">page2</a>
  <a href="/page3">page3</a>
</div>
<br/>
<div id="container"></div>

 

let pathName;
let container = document.getElementById('container');

window.onload = () => { init()} // 初始化界面
window.addEventListener('popstate', checkHistory) // popstate检测url的改变

function init() {
  checkHistory()
  // 拦截 <a> 标签点击事件默认行为, 点击时使用 pushState 修改url
  let linkList = document.querySelectorAll('a[href]')
  linkList.forEach(el => el.addEventListener('click', function (e) {
    e.preventDefault()
    history.pushState(null, '', el.getAttribute('href'))
    checkHistory()
   }))
}

function checkHistory() {
  pathName = window.location.pathname
  container.innerHTML = pathName === '/page1' ? '页面一' : pathName === '/page2' ? '页面二' : '页面三'
}

 

前端路由两种模式各自特点:

hash路由:

低版本兼容性比较好

直接使用

微信开发最好用#,不然每次都要去计算签名(没亲自实践过)

History路由:

兼容性 >ie10

需后端配置支持

转载于:https://www.cnblogs.com/Tiboo/p/11588022.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于路由, 我好奇的那些点 的相关文章

  • 每天10个前端小知识 <Day 6>

    前端面试基础知识题 1 使用js实现二分查找 二分查找 也称为折半查找 是指在有序的数组里找出指定的值 返回该值在数组中的索引 查找步骤如下 从有序数组的最中间元素开始查找 如果该元素正好是指定查找的值 则查找过程结束 否则进行下一步 如果
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • Android SDK开发艺术探索(五)安全与校验

    一 前言 本篇是Android SDK开发艺术探索系列的第五篇文章 介绍了一些SDK开发中安全方面的知识 包括资源完整性 存储安全 权限校验 传输安全 代码混淆等知识 通过基础的安全配置为SDK保驾护航 探索SDK开发在安全方面的最佳实践
  • 「网络安全渗透」如果你还不懂CSRF?这一篇让你彻底掌握

    1 什么是 CSRF 面试的时候的著名问题 谈一谈你对 CSRF 与 SSRF 区别的看法 这个问题 如果我们用非常通俗的语言讲的话 CSRF 更像是钓鱼的举动 是用户攻击用户的 而对于 SSRF 来说 是由服务器发出请求 用户 日 服务器
  • 基于java的饮食分享平台系统设计与实现

    基于java的饮食分享平台系统设计与实现 I 引言 A 研究背景和动机 近年来 随着人们生活水平的提高和健康意识的增强 饮食健康已经成为越来越多人的关注焦点 因此 一个方便快捷的饮食分享平台就显得尤为重要 基于Java的饮食分享平台系统设计
  • 深入了解 Python MongoDB 查询:find 和 find_one 方法完全解析

    在 MongoDB 中 我们使用 find 和 find one 方法来在集合中查找数据 就像在MySQL数据库中使用 SELECT 语句来在表中查找数据一样 查找单个文档 要从MongoDB的集合中选择数据 我们可以使用 find one
  • 【计算机毕业设计】电影播放平台

    电影播放平台采用B S架构 数据库是MySQL 网站的搭建与开发采用了先进的java进行编写 使用了springboot框架 该系统从两个对象 由管理员和用户来对系统进行设计构建 主要功能包括 个人信息修改 对用户 电影分类 电影信息等功能
  • 界面组件DevExpress ASP.NET Core v23.2 - 拥有全新的主题样式

    DevExpress ASP NET Core Controls使用强大的混合方法 结合现代企业Web开发工具所期望的所有功能 该套件通过ASP NET Razor标记和服务器端ASP NET Core Web API的生产力和简便性 提供
  • 低代码配置-列表页组件设计

    保存 表单属性存放 bill 筛选项配置存放 filterLayout 列表按钮存放 buttonLayout 列表布局存放 listLayout api存放 api 数据结构 layout 存放表单基础配置 bill 存放按钮基础配置 b
  • Oracle EBS AP发票导入 API Rejection List 第二部分

    Oracle EBS AP发票导入 API Rejection List 第二部分 The report lists the reason the invoice could not be imported and prints a bri
  • 低代码配置-属性配置面板设计

    模块设计 tab项切换 组件基础属性 组件数据属性 组件事件属性 表单属性 模块输出函数设计 tab切换函数 列表表单属性 数据来源 调用接口时一次赋予 无需使用selectItem 如需使用 归入基础属性 列表标题 是否展示筛选区域
  • 数据库 | 面试官:一次到底插入多少条数据合适啊?.....面试连环炮

    数据库 面试官 一次到底插入多少条数据合适啊 面试连环炮 数据库插入操作的基础知识 插入数据是数据库操作中的基础 但是 我们程序员将面临随之而来的问题 如何快速有效地插入数据 并保持数据库 性能 当你向数据库中插入数据时 这些数据直接存储到
  • 史上最全Java面试八股文(带全部答案)2024年最新版

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 30天精通Nodejs--第十九天:express-文件上传下载

    目录 前言 环境准备与依赖安装 文件上传功能实现 引入并配置express fileupload中间件 注意事项 文件下载功能实现 结语 前言 文件的上传和下载是许多应用程序必备的功能 Node js的Express框架同样可以通过集
  • Web自动化测试 —— cookie复用

    一 cookie简介 cookie是一些数据 存储于用户电脑的文本文件中 当web服务器想浏览器发送web页面时 在链接关闭后 服务端不会记录用户信息 二 为什么要使用Cookie自动化登录 复用浏览器仍然在每次用例开始都需要人为介入 若用
  • 毕业设计:基于python人脸识别系统 LBPH算法 sqlite数据库 (源码)✅

    博主介绍 全网粉丝10W 前互联网大厂软件研发 集结硕博英豪成立工作室 专注于计算机相关专业 毕业设计 项目实战6年之久 选择我们就是选择放心 选择安心毕业 感兴趣的可以先收藏起来 点赞 关注不迷路 毕业设计 2023 2024年计算机毕业
  • 考虑光伏出力利用率的电动汽车充电站能量调度策略研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据
  • 每天10个前端小知识 <Day 14>

    前端面试基础知识题 1 CSSOM树和DOM树是同时解析的吗 浏览器会下载HTML解析页面生成DOM树 遇到CSS标签就开始解析CSS 这个过程不会阻塞 但是如果遇到了JS脚本 此时假如CSSOM还没有构建完 需要等待CSSOM构建完 再去
  • 【js学习之路】遍历数组api之 `filter `和 `map`的区别

    一 前言 数组是我们在项目中经常使用的数据类型 今天我们主要简述作用于遍历数组的api filter 和 map 的区别 二 filter和map的共同点 首先 我们主要阐述一下 filter 和 map 的共同点 api的参数都是回调函数
  • 如何在 Python 脚本中使用 Google OAuth2

    在使用 Python 脚本将视频上传到 YouTube 频道时 若希望将视频上传到第二个频道 需要解决 OAuth2 授权的问题 解决方案 创建新的 Google Cloud 项目 from google oauth2 import ser

随机推荐

  • stm32搭建mqtt_STM32+MQTT协议功能实现

    实例简介 STM32 F103VE 野火的那个 很常用的 移植好的MQtt协议 注册迪发物联的用户 连接就能行 自己亲测可用 也可以自己搭建MQTT服务器连接 实例截图 核心代码 STM32 TCP Client MQTT 完成 STM32
  • 多语言vue-i18n (vue2)

    1 安装 vue i18n npm install vue i18n 8 save npm install vue i18n save 9版本需要vue3 0 在vue2环境下 默认安装 npm install vue i18n 的版本是
  • mysql数据库优化方式

    引言 如何比较两个相同类型产品的好坏 在功能大致相同的情况下 剩下的就拼的是速度 比谁的代码优化的更好 提高代码质量 优化数据库 优化SQL语句提高查询效率 采用Nosql等等 这次我要记录的是8种mysql数据库优化方式 1 选取最适用的
  • 【OpenCV学习笔记】【编程实例】一(VS2010/MFC+OPenCV2.4.7读取图片和摄像头)

    问题 VS2010 MFC OpenCV 显示图片 链接 http jingyan baidu com article f71d60375ddd411ab641d1e3 html 说明 可以了解一个基本的应用OpenCV的MFC程序的基本流
  • IDEA单元测试控制台不能输入数据

    问题 在使用IDEA写单元测试方法 其中包含了输入语句 但在控制台无法输入数据 解决方案 其实这个是IDEA本身的配置问题 我们只需要修改IDEA 添加相应配置文件就好啦 具体操作如下 选择最上方工具栏中的Help gt Edit Cust
  • git pull时报错:Your local changes to the following files would be overwritten by merge

    1 产生原因 这种情况一般是由于 你在工作区修改了一些代码 但是还不打算提交 这时同步主干代码的时候 如果你修改的文件与主干分支的代码有冲突 那么拉取主干分支代码时就会报这个错误 2 简单示例 下面我通过一个简单的例子给大家展示一下这个报错
  • 正弦积分与余弦积分函数

    文章目录 一 被积分函数分析 二 积分函数分析 参考 在看天线理论时遇到了正弦积分与余弦积分函数 为了更好的理解这个函数的性质 使用Python将这两个函数的图像复现出来 同时画了被积函数的图像 图1 书上的公式示例 正弦积分函数 S i
  • mysql 实现批量添加和更新功能

    mapper xml文件配置 单独添加
  • 计算机毕业设计springboot基于Hadoop平台的电影推荐系统541039【附源码+数据库+部署+LW】

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 系统的选题背景和意义 选题背景 随着互联网的快速发展和大数据技术的成熟应用 电影推荐系统成为了电影行业中不可或缺的一部分 基于Hadoop平台
  • opengl es 3D要素——贴图

    前不久开始了正式的opengl es学习 目前为止 成就有 显示一些三维元素 一些可以自由旋转 一些可以用手指控制左右上下的旋转 下一步准备开始写光照了 在此之前先整理下思路 我的工程已经开始变得庞大了 需要声明下 我不太会把全部的代码贴出
  • 学计算机专业的打字要快么,怎样学电脑打字最快电脑新手如何快速学会打字

    01 在零基础的情况下 通过自学快速掌握键盘打字也是需要下一定的功夫的 首先需要说明的是 键盘上有很多按键 一个键盘具有许多的功能 分为了不同的区域 平常使用最多的是主键盘区 而在电脑上打字使用最多的是主键盘区里标有英文大写字母的26个键
  • javascript中的数据类型转换

    个人简介 作者简介 大家好 我是阿牛 个人主页 馆主阿牛 支持我 点赞 收藏 留言 系列专栏 web开发 格言 迄今所有人生都大写着失败 但不妨碍我继续向前 javascript中的数据类型转换 个人简介 前言 数值型转换为字符串类型 字符
  • 如何通过本地搭建wamp服务器并实现无公网IP远程访问

    文章目录 前言 1 Wamp服务器搭建 1 1 Wamp下载和安装 1 2 Wamp网页测试 2 Cpolar内网穿透的安装和注册 2 1 本地网页发布 2 2 Cpolar云端设置 2 3 Cpolar本地设置 3 公网访问测试 4 结语
  • Linux系统下串口调试助手putty,cutecom,xgcom

    系统 linux mint 18 3 xfce 64bit 串口驱动 ch340 系统已自带 没有测试pl2302 尝试了几个linux下的串口调试助手 这里总结一下 由于使用的是USB转串口 CH340 所以在 dev 目录下面看到的串口
  • 人脸识别经典算法三:Fisherface(LDA)

    Fisherface是由Ronald Fisher发明的 想必这就是Fisherface名字由来 Fisherface所基于的LDA Linear Discriminant Analysis 线性判别分析 理论和特征脸里用到的PCA有相似之
  • [杂乱笔记]algorithm头文件下的常用函数

    使用algorithm头文件 需要在头文件加using namespace std 1 常见的函数 max min abs swap int x 98 int y 7 int z 12 printf d d n max x y min y
  • 详细解剖大型H5单页面应用的核心技术点

    阐述下项目 Xut js 开发中一个比较核心的优化技术点 这是一套平台代码 并非某一个插件功能或者框架可以直接拿来使用 核心代码大概是6万行左右 不包含任何插件 这也并非一个开源项目 不能商业使用 只是为了作者开发方便同步修改代码而上传的源
  • FISCO-BCOS 八、ubuntu配置Java环境

    ubuntu配置Java环境需根据自己的java版本号进行细节修改 本文以jdk11 0 18版本为例 一 安装Java 安装默认Java版本 Java 8或以上 sudo apt install y default jdk 查询Java版
  • GPFS文件系统分析

    什么是GPFS文件系统 GPFS General Parallel File System 是IBM公司开发的高性能集群文件系统 从1998年 开始首先应用于AIX集群 2001年后应用于Linux集群 在集群的环境中 GPFS文件系统允许
  • 关于路由, 我好奇的那些点

    最近解锁了一个拯救自我的新技能 就是学习之前 可以先观察下知识时间线 相关人物 以及其他背景等 让那些规则不再变得辣么无聊 什么是路由 通俗的讲就是根据不同的url展示不同页面或者内容 路由的发展阶段 路由的概念最开始是在后端出现的 在以前