Blogger Information
Blog 55
fans 3
comment 0
visits 54980
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
路由原理与实现
王佳祥
Original
811 people have browsed it

路由原理与实现

一、原生路由原理及实现

  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. <script src="lib/vue.js"></script>
  8. </head>
  9. <body>
  10. <a href="#1">新闻1</a>
  11. <a href="#2">新闻2</a>
  12. <a href="#3">新闻3</a>
  13. <!-- 根据路由/锚点不同 -->
  14. <!-- <h3 id="story1" style="margin-top: 1200px">故事的内容是这样的......</h3>
  15. <h3 id="story2" style="margin-top: 1900px">故事的内容是这样的......</h3> -->
  16. <div id="app"></div>
  17. <!-- 404 -->
  18. <div id="page404" style="display: none">这个故事说完了!</div>
  19. </body>
  20. <script>
  21. //原生的SPA(单页面应用)的路由实现方式
  22. //基于锚点实现
  23. //(一)路由的原理
  24. //实现不刷新页面,就可以动态实现数据的加载,达到SPA的效果
  25. /* console.log(window.location.hash);获取url中的锚点
  26. console.log(document.querySelector("a:first-of-type").href.substr(-2));
  27. console.log(document.querySelector("a:nth-of-type(2)").href.substr(-2));
  28. console.log(document.querySelector("a:last-of-type").href.substr(-2)); */
  29. //window.addEventListener("hashchange", () => console.log("hash变化了"));
  30. //(二)路由的实现
  31. //1.创建dom节点,并注册到路由表中
  32. const app = document.querySelector("#app");
  33. const div1 = document.createElement("div");
  34. div1.innerHTML = "1.习近平的2020·八月:谋划“新发展阶段”";
  35. const div2 = document.createElement("div");
  36. div2.innerHTML = "2.中国关于联合国成立75周年立场文件";
  37. const div3 = document.createElement("div");
  38. div3.innerHTML = "3.习近平总书记关切事丨敬礼!最温暖的陪伴";
  39. //2.注册到路由表中
  40. //路由表
  41. const routeTable = {
  42. 1: div1,
  43. 2: div2,
  44. 3: div3,
  45. };
  46. //生成路由
  47. function route(container) {
  48. //1.:获取到路由
  49. let num = window.location.hash.substr(1);
  50. console.log(num);
  51. //2.默认路由
  52. num = num || 1;
  53. console.log(num);
  54. //3.根据路由表获取对应的内容
  55. let content = routeTable[num];
  56. //4.如果路由表不存在指定的内容,获取到404页面
  57. if (!content) content = document.querySelector("#page404");
  58. content.style.display = "block";
  59. //5.先将容器清空
  60. container.innerHTML = null;
  61. //6.将路由对应的页面渲染到指定的容器中
  62. container.appendChild(content);
  63. }
  64. //路由的初始化/显示默认页面
  65. route(app);
  66. //监听路由的变化/监听的锚点的变化
  67. window.addEventListener("hashchange", () => route(app));
  68. </script>
  69. </html>


二、Vue路由的原理

  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>Vue路由的原理</title>
  7. <script src="lib/vue.js"></script>
  8. <!-- 路由包 -->
  9. <script src="lib/vue-router-dev/dist/vue-router.js"></script>
  10. </head>
  11. <body>
  12. <div id="app">
  13. <!-- 1.使用router-link组件来生成导航 -->
  14. <router-link to="/news1">新闻1</router-link>
  15. <router-link to="/news2">新闻2</router-link>
  16. <router-link to="/news3">新闻3</router-link>
  17. <!-- 2.路由内容的渲染 -->
  18. <router-view></router-view>
  19. </div>
  20. </body>
  21. <script>
  22. const news1 = {
  23. template: "<p>1.从前有座山.....</p>",
  24. };
  25. const news2 = {
  26. template: "<p>2.龟兔赛跑.....</p>",
  27. };
  28. const news3 = {
  29. template: "<p>3.和氏璧.....</p>",
  30. };
  31. //注册路由
  32. const router = new VueRouter({
  33. routes: [
  34. //是一个对象数组,每个对象对应一个路由
  35. { path: "/news1", component: news1 },
  36. { path: "/news2", component: news2 },
  37. { path: "/news3", component: news3 },
  38. ],
  39. });
  40. //vue实例
  41. const vm = new Vue({
  42. //将路由注册到挂载点中
  43. //当属性名与变量同名,只需要写一个
  44. router: router,
  45. //router,
  46. }).$mount("#app");
  47. </script>
  48. </html>


学习总结

1.原生路由

  • window.location.hash获取url中的锚点

  • hashchange参数来监听锚点的变化

  • 实现路由的步骤:

    1.创建dom节点

    2.注册到路由表中

    3.生成路由(获取到路由、设置默认路由、根据路由表获取对应的内容、清空容器、将路由对应的页面渲染到指定的容器中)

    4.路由初始化/显示默认页面

    5.监听路由的变化/监听的锚点的变化

2.vue路由

  1. const router = new VueRouter({
  2. routes: [//是一个对象数组,每个对象对应一个路由],
  3. });
  • 最后将路由注册到挂载点中

  • 当属性名与变量同名,只需要写一个

  • $mount():手动挂载

3.git基础

  • git:免费,开源的分布式版本控制系统

  • git 中的一些术语:

    • 版本库

      • 本地版本库
      • 远程版本库
    • 工作区

    • 暂存区

  • git 流程

    • 在工作中编程
    • 将代码先放到暂存区
    • 将暂存区内容一次性的提交到本地版本库
    • 将本地的版本库内容提交到远程的版本库


  • cd 目录 切换到需要使用git进行版本控制的项目目录中

  • 配置用户名和邮箱

  1. git config --global user.name '用户名'
  2. git config --global user.email '邮箱'
  • git 版本库的初始化:创建版本库
  1. git init
  • 将工作区的已经修改过的文件,提交到本地版本库中的暂存区
  1. git add . # 一次性全部提交完毕 add命令可将该文件添加到暂存区
  2. git status # 查看状态
  • 在将所有的内容从本地暂存区一次性的提交到本地的版本库
  1. git commit -m '2020-09-10 22:02' //'注释'
  • 添加远程版本库
  1. git remote add origin https://gitee.com/bnkt/git-edu.git
  • 查看远程仓库
  1. git remote -v
  • 提交到远程仓库
  1. git push origin master //指定远程仓库名和分支名
  2. git push -u origin master //将本地的master分支推送到origin主机,同时指定origin为默认主机
  3. git push -f origin master //本地强制上传到远程,把远程的覆盖
  • 从远程仓库拉取内容
  1. git pull https://gitee.com/jia-xiang/git-edu.git
  2. git pull origin master






  • 从远程仓库拉取内容




Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:挺棒的, 原生路由理解了, 那么框架还难吗?
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post