博客列表 >Vue路由原理与实现

Vue路由原理与实现

残破的蛋蛋
残破的蛋蛋原创
2021年01月22日 11:11:591011浏览

Vue路由原理与实现

一、基于哈希的路由原理与实现

1.1 基于锚点的hash路由

Location 接口表示其链接到的对象的位置(URL)。

属性:

Location.href

  • 包含整个URL的一个DOMString

Location.protocol

  • 包含URL对应协议的一个DOMString,最后有一个”:”。

Location.host

  • 包含了域名的一个DOMString,可能在该串最后带有一个”:”并跟上URL的端口号。

Location.hostname

  • 包含URL域名的一个DOMString。
    Location.port

包含端口号的一个DOMString。

Location.pathname

  • 包含URL中路径部分的一个DOMString,开头有一个“/“。
    Location.search

  • 包含URL参数的一个DOMString,开头有一个“?”。
    Location.hash

  • 包含块标识符的DOMString,开头有一个“#”。

Location.username

  • 包含URL中域名前的用户名的一个DOMString。

Location.password

  • 包含URL域名前的密码的一个 DOMString。

Location.origin 只读

  • 包含页面来源的域名的标准形式DOMString。

下面是一个基于锚点的哈希路由模式案例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>基于锚点的哈希路由模式</title>
  7. </head>
  8. <body>
  9. <div class="wrap">
  10. <nav>
  11. <a href="#list1">国际新闻</a>
  12. <a href="#list2">娱乐新闻</a>
  13. </nav>
  14. <!-- 该区域专用于显示路由的内容 -->
  15. <div class="route-view"></div>
  16. <script>
  17. let list1 = `
  18. <ul id="list1">
  19. <li><a href="">美国:是“我有一个梦想”还是“我已不能呼吸”</a></li>
  20. <li><a href="">美国:是“我有一个梦想”还是“我已不能呼吸”</a></li>
  21. <li><a href="">美国:是“我有一个梦想”还是“我已不能呼吸”</a></li>
  22. </ul>
  23. `;
  24. let list2 = `
  25. <ul id="list2" style="transform: translate(0, 10rem);transition: all 0.5s;">
  26. <li><a href="">19日晚,郑爽再度发文回应代孕弃养,并爆料张恒曾出轨。</a></li>
  27. <li><a href="">19日晚,郑爽再度发文回应代孕弃养,并爆料张恒曾出轨。</a></li>
  28. <li><a href="">19日晚,郑爽再度发文回应代孕弃养,并爆料张恒曾出轨。</a></li>
  29. </ul>
  30. `;
  31. // //获取路由的内容显示区的元素
  32. const routeView = document.querySelector('.route-view');
  33. // // window.location 当前页面的URL
  34. // // 锚点使用 location.hash 包含块标识符的DOMString,开头有一个“#”。
  35. // console.log(location.hash);
  36. // hashchange:url中的锚点变化时会自动触发此事件
  37. window.addEventListener("hashchange", show);
  38. // DOMContentLoaded:当初始的HTML文档被完全加载和解析之后,DOMContentLoaded事件被触发,而无需等待
  39. // 样式表、图像和子框架的完全加载,
  40. // window.addEventListener("load", show)
  41. console.log(location.pathname);
  42. // load和DOMContentLoaded的区别,简而言之就是只要DOM树创建完成就会触发,而load要等js和图片资源加载完成才触发
  43. //页面加载完成之后自动加载默认锚点
  44. window.addEventListener("DOMContentLoaded", show);
  45. function show () {
  46. console.log(location.hash);
  47. switch (location.hash) {
  48. case "#list1":
  49. routeView.innerHTML = list1;
  50. break;
  51. case "#list2":
  52. routeView.innerHTML = list2;
  53. break;
  54. default:
  55. routeView.innerHTML = list1;
  56. }
  57. }
  58. </script>
  59. </div>
  60. </body>
  61. </html>
  • 效果图:

锚点哈希路由

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议