博主信息
博文 37
粉丝 0
评论 0
访问量 44320
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
路由的原理和实现
手机用户1607314868
原创
972人浏览过

路由

1.路由是什么?
本质就是,查找资源的方式
2.路由的分类
前端路由:通过动态改变url实现
后端路由:资源通常放在服务器上
3.前端路由
哈希模式:监听 url地址栏中 # 后面的内容变化/锚点
历史纪录:’window.history’对象,监听’popstate’事件

基于锚点的哈希路由模式
  1. <nav>
  2. <a href="#/list">国际新闻</a>
  3. <a href="#/list2">娱乐新闻</a>
  4. </nav>
  5. <div class="route-view"></div>
  6. <script>
  7. let list1=`<ul id="list1">
  8. <li><a href="">国际新闻1</a></li>
  9. <li><a href="">国际新闻1</a></li>
  10. <li><a href="">国际新闻1</a></li>
  11. </ul>`;
  12. let list2=`<ul id="list2">
  13. <li><a href="">娱乐新闻2</a></li>
  14. <li><a href="">娱乐新闻2</a></li>
  15. <li><a href="">娱乐新闻2</a></li>
  16. </ul>`;
  17. //获取路由的内容显示区元素
  18. const routeView=document.querySelector('.route-view');
  19. //锚点使用 location.hash
  20. //hashchange: url中的锚点变化时会自动触发这个事件
  21. window.addEventListener("hashchange",show);
  22. window.addEventListener("load",show);
  23. // window.addEventListener("DOMContentLoaded",show);
  24. function show(){
  25. switch(location.hash){
  26. case "#/list1":
  27. routeView.innerHTML=list1;
  28. break;
  29. case "#/list2":
  30. routeView.innerHTML=list2;
  31. break;
  32. default:
  33. routeView.innerHTML=list1;
  34. }
  35. }
  36. </script>
Vue的路由基于哈希实现,使用a标签的锚点实现
  1. <nav class="app">
  2. <!-- 1.vue的路由基于哈希实现,使用a标签的锚点来实现 -->
  3. <router-link to='/list1'>国内新闻</router-link>
  4. <router-link to='/list2'>娱乐新闻</router-link>
  5. <!-- 路由到的资源显示区域 -->
  6. <router-view></router-view>
  7. </nav>
  8. <script>
  9. //1.创建路由对象
  10. const router=new VueRouter({
  11. //路由配置项
  12. routes:[
  13. //每个路由都是一个对象,每一个对象对应者一个路由地址
  14. {
  15. path: '/list1',
  16. compontent:{
  17. template:`
  18. <ul id="list1">
  19. <li><a href="">国际新闻1</a></li>
  20. <li><a href="">国际新闻1</a></li>
  21. <li><a href="">国际新闻1</a></li>
  22. </ul> `,
  23. }
  24. },
  25. {
  26. path: '/list2',
  27. compontent:{
  28. template:`
  29. <ul id="list2">
  30. <li><a href="">娱乐新闻1</a></li>
  31. <li><a href="">娱乐新闻1</a></li>
  32. <li><a href="">娱乐新闻1</a></li>
  33. </ul> `,
  34. }
  35. },
  36. ]
  37. });
  38. //2.注册路由
  39. new Vue({
  40. router:router,
  41. }).#mount(".app");
  42. </script>
历史记录对象路由模式
  1. <nav>
  2. <a href="#/list1">国际新闻</a>
  3. <a href="#/list2">娱乐新闻</a>
  4. </nav>
  5. <div class="route-view">
  6. </div>
  7. <script>
  8. let list1=`<ul id="list1">
  9. <li><a href="">国际新闻1</a></li>
  10. <li><a href="">国际新闻1</a></li>
  11. <li><a href="">国际新闻1</a></li>
  12. </ul>`;
  13. let list2=`<ul id="list2">
  14. <li><a href="">娱乐新闻2</a></li>
  15. <li><a href="">娱乐新闻2</a></li>
  16. <li><a href="">娱乐新闻2</a></li>
  17. </ul>`;
  18. const routeView=document.querySelector(".router-view");
  19. const links=document.querySelectorAll("nav a[href]");
  20. links.forEach(link=>link.onclick=(ev)=>{
  21. //禁用a标签的挑战
  22. ev.preventDefault();
  23. //history.pushState(状态对象,标题,url)
  24. history.pushState(null,"",link,href);
  25. //手动更新了url,但popstate事件监听不到这个变化
  26. show();
  27. });
  28. window.addEventListener("popstate",show);
  29. function show(){
  30. console.log(location.pathname);
  31. switch(location.pathname){
  32. case "#/list1":
  33. routeView.innerHTML=list1;
  34. break;
  35. case "#/list2":
  36. routeView.innerHTML=list2;
  37. break;
  38. default:
  39. routeView.innerHTML=list1;
  40. }
  41. }
  42. </script>
批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学