spa单页面应用,主要两种实现方式,history和hash。通过js操作浏览器bom中的history和location.hash对象实现页面的切换跳转。

history模式

  1. <div id="app">
  2. <a class="route a">pageA</a>
  3. <a class="route a">pageB</a>
  4. </div>
  1. <script>
  2. // 注册路由
  3. document.querySelectorAll(".route").forEach(route => {
  4. route.addEventListener('click', (e) => {
  5. e.preventDefault();
  6. let link = route.textContent;
  7. window.history.pushState({ name: 'route' }, link + "title", link);
  8. })
  9. })
  10. // 监听路由
  11. window.addEventListener('popstate', (e) => {
  12. console.log({
  13. location: location.href,
  14. state: e.state
  15. });
  16. })
  17. </script>

通过window下的history对象的pushState设置路由,可以看到浏览器的地址栏发生路径切换。
点击浏览器的前进和后退按钮,此时可触发监听路由事件,通过popstate的方法进行监听
由此实现前端路由的切换。

hash模式

第二种前端路由切换模式

  1. <div id="app">
  2. <a class="hash a">/pageA</a>
  3. <a class="hash a">/pageB</a>
  4. </div>
  1. <script>
  2. // 注册路由
  3. document.querySelectorAll(".hash").forEach(route => {
  4. route.addEventListener('click', (e) => {
  5. e.preventDefault();
  6. let link = route.textContent;
  7. location.hash = link
  8. }, false);
  9. })
  10. // 监听路由
  11. window.addEventListener('hashchange', (e) => {
  12. console.log({
  13. location: location.href,
  14. hash: location.hash
  15. });
  16. })
  17. </script>

通过location.hash进行页面跳转,并通过hashchange事件进行监听。
可以实现前端页面的路由跳转