当前位置: 首页 > news >正文

Vue2-Vue Router前端路由实现思路

1.路由是什么?

Router路由器:数据包转发设备,路由器通过转发数据包(数据分组)来实现网络互连

Route路由:数据分组从源到目的地时,决定端到端路径的网络范围的进程  | - 网络层

Distribute分发:数据包或任务根据规则,分配到不同的路径

Default Route默认路由:路由表中没有匹配的路由时,默认显示的路由

Fallback Routing404路由/保底路由:匹配所有处理未定义或未找到路由请求的特殊路由

Nested Routing嵌套路由:一个路由组件内部定义其他路由组件,形成父子结构的路由

Routing Table路由表:存储到各个目的地的最佳路径的表,引导分组转送  | - 对象

#原生js实现路由/* index.html */
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Test Router</title></head>
<body><section><a href="#1">page 1</a><br/><a href="#2">page 2</a><br/><a href="#3">page 3</a><br/><a href="#4">page 4</a><br/></section><div id="app"></div><div id="div1" style="display: none">1</div><div id="div2" style="display: none">2</div><div id="div3" style="display: none">3</div><div id="div4" style="display: none">4</div><div id="div404" style="display: none"><span>404</span><hr/><span>Not found</span></div><script src="./src/main.js"></script>
</body>
</html><style>a{color: blueviolet;text-decoration: none;}#app{background: pink;font-size: 32px;}#div404{text-align: center;}
</style>
/* main.js 实现不同路由匹配不同页面 */function route(){/* 获取hash */let hash=window.location.hashlet number=hash.substr(1) || '1'console.log(hash,number)/* 获取并显示当前哈希匹配的div */let div=document.querySelector(`#div${number}`)if (div) {div.style.display = "block";let app = document.querySelector('#app');app.appendChild(div);}else{/* 保底路由404 */div = document.querySelector(`#div404`)div.style.display = "block";document.querySelector("body").appendChild(div);}
}
route()window.addEventListener("hashchange",()=>{/* 隐藏所有div */let allDivs = document.querySelectorAll('[id^="div"]');allDivs.forEach(div => div.style.display = "none");/* 更新路由匹配 */route()
})

2.路由的三种模式

 

 

相关文章:

  • 事务底层与高可用原理
  • linux中 nginx+tomcat 部署方式 tomcat挂掉设置自动启动
  • Elasticsearch架构基本原理
  • C++时区转换
  • 51单片机第15步_串口多机通讯使用CRC8校验
  • 信创产业政策,信创测试方面
  • 44 mysql batch insert 的实现
  • JavaScript懒加载图像
  • Vue移动端地图App:van-uploader导致的卡顿问题
  • 企业级-生成PDF移除异常空白页
  • pycharm配置conda解释器
  • 【SSL 1056】最大子矩阵 (多维DP)
  • 统计信号处理基础 习题解答11-8
  • C语言中宏定义控制日志输出及log库介绍
  • 在大型项目中,怎样有效地组织和管理 SCSS 文件结构以提高开发效率?
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Git 使用集
  • Laravel核心解读--Facades
  • Python进阶细节
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何选择开源的机器学习框架?
  • 带你开发类似Pokemon Go的AR游戏
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #、%和$符号在OGNL表达式中经常出现
  • #NOIP 2014# day.2 T2 寻找道路
  • (12)Linux 常见的三种进程状态
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2)Java 简介
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (原創) 物件導向與老子思想 (OO)
  • .net core 6 redis操作类
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .NET Reactor简单使用教程
  • .Net Redis的秒杀Dome和异步执行
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET程序员迈向卓越的必由之路
  • .NET开源快速、强大、免费的电子表格组件
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .Net下的签名与混淆
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • .NET之C#编程:懒汉模式的终结,单例模式的正确打开方式
  • @synthesize和@dynamic分别有什么作用?
  • [2016.7 test.5] T1
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [C#]winform使用onnxruntime部署LYT-Net轻量级低光图像增强算法
  • [C/C++]关于C++11中的std::move和std::forward
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出
  • [Google Guava] 1.1-使用和避免null
  • [hibernate]基本值类型映射之日期类型
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]
  • [leetcode] 103. 二叉树的锯齿形层次遍历