博主信息
博文 37
粉丝 1
评论 0
访问量 41441
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
用原生js和veurouter实现路由功能
Jason Pu?
原创
764人浏览过

一.原生js路由:

前置知识:
1.锚点可以改变url地址,实现在当前页面内部的不同区域之间进行跳转,所以页面不会刷新
2.location.hash: 得到的是锚链接,第一个#后面出现的任何字符
3.hashchange: url中的锚点变化时会自动触发这个事件


了解了以上知识,就可以开始实战了,先做好锚点和显示区域:

  1. <nav>
  2. <a href="#/news">新闻</a>
  3. <a href="#/sports">体育</a>
  4. <a href="#/calture">文化</a>
  5. </nav>
  6. <div class="content"></div>

显示给相应的锚点做好显示内容:

  1. let news=`
  2. <ul>
  3. <li><a href="">外交部宣布中方对蓬佩奥等28人实施制裁 理上网来</a> </li>
  4. <li><a href="">奋斗百年路 一部法典背后的公平正义宣言 制度优势</a> </li>
  5. <li><a href="">2020年居民收入榜:上海人均可支配收入超7万元</a> </li>
  6. </ul>
  7. `;
  8. let sports=`
  9. <ul>
  10. <li><a href="">中德足协召开视讯会议 推动视频助理裁判项目合作</a> </li>
  11. <li><a href="">孙准浩近日将抵达济南 泰山队冬训持续到春节前</a> </li>
  12. <li><a href="">世界俱乐部排名TOP400:中超四队入围 国安119位</a> </li>
  13. </ul>
  14. `;
  15. let calture=`
  16. <ul>
  17. <li><a href="">湖北省博物馆十大“镇馆之宝”揭晓</a> </li>
  18. <li><a href="">山西北白鹅春秋大墓出土大量青铜器</a> </li>
  19. <li><a href="">湖北省博物馆十大“镇馆之宝”揭晓</a> </li>
  20. </ul>
  21. `;

获取路由显示区:

  1. let content = document.querySelector(".content");

写一个函数,判断哈希值的变化,并根据相应的变化为内容区填上相应内容,因为是判断单一值变化,所以我们用switch:

  1. function router(){
  2. switch(window.location.hash){
  3. case "#/sports":
  4. content.innerHTML = sports;
  5. break;
  6. case "#/news":
  7. content.innerHTML = news;
  8. break;
  9. case "#/calture":
  10. content.innerHTML = calture;
  11. break;
  12. default:content.innerHTML = news;
  13. }
  14. }

接下来就可以监听并执行函数了:

  1. window.onload=()=>{
  2. router();
  3. };
  4. window.addEventListener("hashchange",router);

window.onload也可以换成:

  1. window.addEventListener("DOMContentLoaded", router);

二.用VueRouter写一个路由

注意:
1.锚点的标签是<router-link></router-link>,原生里面的href=””在VueRouter当中必须写成to=””。
2.显示区域:设置成<router-view><router-view/>也是固定搭配

所以锚点和显示区域应该如下:

  1. <nav class="box">
  2. <router-link to="/news">新闻</router-link>
  3. <router-link to="/sports">体育</router-link>
  4. <router-link to="/calture">文化</router-link>
  5. <!-- ver-router的显示区域: -->
  6. <router-view></router-view>
  7. </nav>

显示的内容有点类似组件的模版:

  1. const news={
  2. template:`
  3. <ul>
  4. <li><a href="">外交部宣布中方对蓬佩奥等28人实施制裁 理上网来</a> </li>
  5. <li><a href="">奋斗百年路 一部法典背后的公平正义宣言 制度优势</a> </li>
  6. <li><a href="">2020年居民收入榜:上海人均可支配收入超7万元</a> </li>
  7. </ul>
  8. `,};
  9. const sports={
  10. template:`
  11. <ul>
  12. <li><a href="">中德足协召开视讯会议 推动视频助理裁判项目合作</a> </li>
  13. <li><a href="">孙准浩近日将抵达济南 泰山队冬训持续到春节前</a> </li>
  14. <li><a href="">世界俱乐部排名TOP400:中超四队入围 国安119位</a> </li>
  15. </ul>
  16. `,};
  17. const calture={
  18. template:`
  19. <ul>
  20. <li><a href="">湖北省博物馆十大“镇馆之宝”揭晓</a> </li>
  21. <li><a href="">山西北白鹅春秋大墓出土大量青铜器</a> </li>
  22. <li><a href="">湖北省博物馆十大“镇馆之宝”揭晓</a> </li>
  23. </ul>
  24. `,};

创建一个路由,并关联锚点和内容,非常的直观:

  1. const router = new VueRouter({
  2. // 路由配置:
  3. routes:[
  4. {path:"/news",component:news},
  5. {path:"/sports",component:sports},
  6. {path:"/calture",component:calture},
  7. ],
  8. });

再注册一下路由,就可以运行了:

  1. new Vue({
  2. el:".box",
  3. // 注册路由:
  4. router:router,
  5. })

运行效果如下:

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学