博客列表 >用原生js和veurouter实现路由功能

用原生js和veurouter实现路由功能

Jason Pu?
Jason Pu?原创
2021年01月21日 14:49:41587浏览

一.原生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 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议