博客列表 >锚点前端路由与Vue前端路由的实现

锚点前端路由与Vue前端路由的实现

咸鱼老爷
咸鱼老爷原创
2021年03月09日 17:25:24895浏览

基于锚点哈希路由模式

  1. 锚点可以改变url地址,实现在当前页面内部的不同区域之间进行跳转
  2. 因为是在当前页面中跳转,所以页面不会刷新
  3. 所以使用锚点可以完成spa的二大目标:既要改变url,又不刷新页面

原生js实现

  1. <nav>
  2. <a href="#list1">国际新闻</a>
  3. <a href="#list2">娱乐新闻</a>
  4. </nav>
  5. <!-- 该区域专用于显示路由的内容 -->
  6. <div class="route-view"></div>
  7. <script>
  8. let str1 = `<ul id="list1">
  9. <li><a href="">美国</a></li>
  10. <li><a href="">美国</a></li>
  11. <li><a href="">美国</a></li>
  12. <li><a href="">美国</a></li>
  13. </ul>`;
  14. let str2 = `<ul id="list2">
  15. <li><a href="">娱乐</a></li>
  16. <li><a href="">娱乐</a></li>
  17. <li><a href="">娱乐</a></li>
  18. <li><a href="">娱乐</a></li>
  19. </ul>`
  20. //获取路由的内容显示区元素
  21. const rout = document.querySelector('.route-view');
  22. //锚点使用location.hash
  23. //window.location :描述当前url信息
  24. //hashchange:url中的锚点变化时会自动触发这个事件
  25. window.addEventListener('hashchange', show)
  26. window.addEventListener('load', show)
  27. function show() {
  28. console.log(location.hash);
  29. switch (location.hash) {
  30. case '#list1':
  31. rout.innerHTML = str1;
  32. return;
  33. case '#list2':
  34. rout.innerHTML = str2;
  35. return;
  36. default:
  37. rout.innerHTML = str1;
  38. }
  39. }
  40. </script>

vue实现哈希路由

使用vue-router库
路由地址标签<router-link to='/地址'>
路由资源显示<router-view>

  1. <nav class="nav">
  2. <router-link to='/list1'>国际新闻</router-link>
  3. <router-link to='/list2'>娱乐新闻</router-link>
  4. <!-- 路由到的资源显示区域 -->
  5. <router-view></router-view>
  6. </nav>
  7. <script>
  8. let list1 = {
  9. template: `
  10. <ul id="list1">
  11. <li><a href="">美国</a></li>
  12. <li><a href="">美国</a></li>
  13. <li><a href="">美国</a></li>
  14. <li><a href="">美国</a></li>
  15. </ul>`,
  16. };
  17. let list2 = {
  18. template: `
  19. <ul id="list2">
  20. <li><a href="">娱乐</a></li>
  21. <li><a href="">娱乐</a></li>
  22. <li><a href="">娱乐</a></li>
  23. <li><a href="">娱乐</a></li>
  24. </ul>`,
  25. }
  26. //创建路由对象
  27. const router = new VueRouter({
  28. //路由配置项
  29. routes: [
  30. //每一个路由都是一个对象,每一个对象对应着一个路由地址
  31. {
  32. path: '/list1',
  33. component: list1,
  34. }, {
  35. path: '/list2',
  36. component: list2,
  37. },
  38. ],
  39. });
  40. //注册路由
  41. const nav = new Vue({
  42. el: '.nav',
  43. router: router,
  44. })
  45. </script>

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