当前位置:首页 > JavaScript

js route 实现

2026-03-14 17:06:06JavaScript

路由实现的基本方法

在 JavaScript 中实现路由通常有两种方式:基于哈希(Hash)的路由和基于历史 API(History API)的路由。以下是具体实现方法:

基于哈希的路由

哈希路由利用 URL 中的哈希部分(#)来实现无刷新页面跳转。当哈希变化时,触发 hashchange 事件。

window.addEventListener('hashchange', function() {
  const hash = window.location.hash.substring(1);
  handleRoute(hash);
});

function handleRoute(route) {
  switch(route) {
    case 'home':
      document.getElementById('content').innerHTML = '<h1>Home Page</h1>';
      break;
    case 'about':
      document.getElementById('content').innerHTML = '<h1>About Page</h1>';
      break;
    default:
      document.getElementById('content').innerHTML = '<h1>404 Not Found</h1>';
  }
}

基于 History API 的路由

History API 提供了 pushStatepopstate 方法,允许更干净的 URL 而不需要哈希符号。

window.addEventListener('popstate', function() {
  const path = window.location.pathname;
  handleRoute(path);
});

function navigateTo(path) {
  window.history.pushState({}, '', path);
  handleRoute(path);
}

function handleRoute(path) {
  switch(path) {
    case '/home':
      document.getElementById('content').innerHTML = '<h1>Home Page</h1>';
      break;
    case '/about':
      document.getElementById('content').innerHTML = '<h1>About Page</h1>';
      break;
    default:
      document.getElementById('content').innerHTML = '<h1>404 Not Found</h1>';
  }
}

动态路由的实现

对于需要处理动态参数的路由(如 /user/:id),可以使用正则表达式匹配。

function handleDynamicRoute(path) {
  const userPattern = /^\/user\/(\d+)$/;
  const match = path.match(userPattern);

  if (match) {
    const userId = match[1];
    document.getElementById('content').innerHTML = `<h1>User ID: ${userId}</h1>`;
    return;
  }

  // 其他路由处理...
}

路由库的使用

对于更复杂的应用,可以使用现有的路由库如 React Router、Vue Router 或 Page.js:

// 使用 Page.js 的示例
page('/home', function() {
  document.getElementById('content').innerHTML = '<h1>Home Page</h1>';
});

page('/about', function() {
  document.getElementById('content').innerHTML = '<h1>About Page</h1>';
});

page('*', function() {
  document.getElementById('content').innerHTML = '<h1>404 Not Found</h1>';
});

page();

路由守卫的实现

路由守卫用于在路由切换前进行权限检查或其他操作。

js route 实现

function checkAuth(ctx, next) {
  const isAuthenticated = /* 检查用户是否登录 */;
  if (!isAuthenticated && ctx.path !== '/login') {
    next('/login');
  } else {
    next();
  }
}

page('/dashboard', checkAuth, function() {
  document.getElementById('content').innerHTML = '<h1>Dashboard</h1>';
});

这些方法涵盖了从基础到进阶的路由实现技术,可以根据项目需求选择合适的方案。

标签: jsroute
分享给朋友:

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.define…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…