如何制作自己的原生JavaScript路由

这里为大家详细讲解一下如何制作自己的原生JavaScript路由。

什么是JavaScript路由

JavaScript路由是一种通过JavaScript对页面URL进行控制的技术,它可以实现局部刷新,无需完全刷新页面即可展示新的内容,并且可以通过状态管理实现前端路由系统。

如何制作自己的JavaScript路由

步骤如下:

1. 创建HTML页面

我们以一个简单的单页面应用为例,创建一个HTML页面作为路由的载体。在HTML页面中,我们可以根据自己的需求定义不同的页头、页脚、导航栏等元素。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Router App</title>
</head>
<body>
    <nav>
        <a href="#/">Home</a>
        <a href="#/about">About</a>
        <a href="#/contact">Contact</a>
    </nav>
    <div id="content">
        <h1>Welcome Home!</h1>
        <p>Content will load here...</p>
    </div>
</body>
</html>

2. 实现路由逻辑

为了实现JavaScript路由,我们需要监听window对象的hashchange事件。当URL中的哈希值发生变化时,我们就可以通过自定义的路由规则来决定显示哪个页面。比如我们可以定义一个名为router的函数,来控制路由:

function router() {
    let hash = window.location.hash.substr(1);
    if (hash === "") {
        document.getElementById("content").innerHTML = "<h1>Welcome Home!</h1><p>Content will load here...</p>";
    } else if (hash === "about") {
        document.getElementById("content").innerHTML = "<h1>About Us</h1><p>We are a team of developers...</p>";
    } else if (hash === "contact") {
        document.getElementById("content").innerHTML = "<h1>Contact Us</h1><p>You can send us an email...</p>";
    } else {
        document.getElementById("content").innerHTML = "<h1>Page Not Found</h1><p>The page you requested was not found...</p>";
    }
}

window.addEventListener("hashchange", router);
router();

这个函数的作用是根据不同的哈希值,决定页面显示的内容。在这个示例中,我们根据哈希值的不同,来显示不同的静态页面。

3. 处理路由参数

如果我们想要传递一些参数,比如说我们想让/about页面根据用户不同的参数来动态显示不同的内容,那应该怎么处理呢?

一个常见的方法是在哈希值中使用动态参数,例如#about/:id。这里的id就是参数,我们可以用正则表达式来提取它,然后根据这个参数来显示不同的内容。

function extractParams(template, request) {
    const params = {}; 
    const res = template.exec(request);
    if (res) {
        for (let i = 1; res[i]; i++) {
            params[res[i].split('=')[0]] = res[i].split('=')[1];
        }
    }
    return params;
}

function router() {
    let hash = window.location.hash.substr(1);
    let params = extractParams(/about\/(\w+)/.exec(hash), hash);
    if (hash === "") {
        document.getElementById("content").innerHTML = "<h1>Welcome Home!</h1><p>Content will load here...</p>";
    } else if (hash === "about") {
        if (params && params.id) {
            document.getElementById("content").innerHTML = "<h1>About Us</h1><p>Showing content for user " + params.id + "</p>";
        } else {
            document.getElementById("content").innerHTML = "<h1>About Us</h1><p>We are a team of developers...</p>";
        }
    } else if (hash === "contact") {
        document.getElementById("content").innerHTML = "<h1>Contact Us</h1><p>You can send us an email...</p>";
    } else {
        document.getElementById("content").innerHTML = "<h1>Page Not Found</h1><p>The page you requested was not found...</p>";
    }
}

window.addEventListener("hashchange", router);
router();

在这个示例中,我们定义了一个extractParams函数,用于提取哈希值中的参数。然后在router函数中,我们根据提取到的参数来动态显示不同的内容。

示例

以上是制作自己的JavaScript路由的具体过程,下面我为大家提供两个适用示例。

1. 基本的SPA应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Router App</title>
</head>
<body>
    <nav>
        <a href="#/">Home</a>
        <a href="#/about">About</a>
        <a href="#/contact">Contact</a>
    </nav>
    <div id="content">
        <h1>Welcome Home!</h1>
        <p>Content will load here...</p>
    </div>
    <script>
        function router() {
            let hash = window.location.hash.substr(1);
            if (hash === "") {
                document.getElementById("content").innerHTML = "<h1>Welcome Home!</h1><p>Content will load here...</p>";
            } else if (hash === "about") {
                document.getElementById("content").innerHTML = "<h1>About Us</h1><p>We are a team of developers...</p>";
            } else if (hash === "contact") {
                document.getElementById("content").innerHTML = "<h1>Contact Us</h1><p>You can send us an email...</p>";
            } else {
                document.getElementById("content").innerHTML = "<h1>Page Not Found</h1><p>The page you requested was not found...</p>";
            }
        }

        window.addEventListener("hashchange", router);
        router();
    </script>
</body>
</html>

2. 处理动态路由参数的应用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Router App</title>
</head>
<body>
    <nav>
        <a href="#/">Home</a>
        <a href="#/about">About</a>
        <a href="#/about/123456">About User #123456</a>
        <a href="#/contact">Contact</a>
    </nav>
    <div id="content">
        <h1>Welcome Home!</h1>
        <p>Content will load here...</p>
    </div>
    <script>
        function extractParams(template, request) {
            const params = {}; 
            const res = template.exec(request);
            if (res) {
                for (let i = 1; res[i]; i++) {
                    params[res[i].split('=')[0]] = res[i].split('=')[1];
                }
            }
            return params;
        }

        function router() {
            let hash = window.location.hash.substr(1);
            let params = extractParams(/about\/(\w+)/.exec(hash), hash);
            if (hash === "") {
                document.getElementById("content").innerHTML = "<h1>Welcome Home!</h1><p>Content will load here...</p>";
            } else if (hash === "about") {
                if (params && params.id) {
                    document.getElementById("content").innerHTML = "<h1>About Us</h1><p>Showing content for user " + params.id + "</p>";
                } else {
                    document.getElementById("content").innerHTML = "<h1>About Us</h1><p>We are a team of developers...</p>";
                }
            } else if (hash === "contact") {
                document.getElementById("content").innerHTML = "<h1>Contact Us</h1><p>You can send us an email...</p>";
            } else {
                document.getElementById("content").innerHTML = "<h1>Page Not Found</h1><p>The page you requested was not found...</p>";
            }
        }

        window.addEventListener("hashchange", router);
        router();
    </script>
</body>
</html>

以上就是制作自己的JavaScript路由的完整攻略,希望对大家有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何制作自己的原生JavaScript路由 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • Javascript String 字符串操作包

    Javascript String 字符串操作包攻略 在Javascript中,String是一种用来表示文字序列的数据类型。String类型的值是由一对双引号或单引号括起来的一串字符。Javascript提供了一系列的字符串操作方法,可以方便地对字符串进行处理。 创建字符串 可以通过以下方式来创建字符串: let str1 = "hello wo…

    JavaScript 2023年5月28日
    00
  • JavaScript实现页面电子时钟

    下面是JavaScript实现页面电子时钟的完整攻略: 1. 准备工作 在实现页面电子时钟之前,需要先编写HTML和CSS代码来布局和样式化页面,然后才能使用JavaScript来实现时钟的功能。 1.1. HTML代码 HTML代码负责页面的布局,通常会包含容器元素来存放时钟的各个部分。 <!– 电子时钟容器 –> <div clas…

    JavaScript 2023年5月28日
    00
  • JavaScript调用客户端Java程序的方法

    下面我将为您详细讲解“JavaScript调用客户端Java程序的方法”的完整攻略。 1. 前置条件 为了实现JavaScript调用客户端Java程序的方法,我们需要满足以下前置条件: 客户端浏览器支持Java Applet。 您已经编写了相应的Java Applet程序,并将其打包为Jar文件。 2. 实现过程 下面是具体的实现过程: 2.1 在HTML…

    JavaScript 2023年5月27日
    00
  • javascript History对象原理解析

    当用户在浏览器中浏览网站时,浏览器会记录下用户浏览的历史记录,在JavaScript中,这些历史记录可以通过History对象来访问和操作。本文将详细讲解JavaScript的History对象的原理。 History对象简介 History对象是浏览器提供的一个JavaScript对象,它用来记录用户在浏览器中访问页面的历史记录,每个历史记录包含一个URL…

    JavaScript 2023年5月27日
    00
  • javascript显示中文日期的方法

    对于JavaScript来显示中文日期,可以按照以下步骤进行操作: 步骤 创建一个Date对象并获取当前日期: let date = new Date(); 调用Date对象的对应方法去获取年、月、日等信息: let year = date.getFullYear(); // 获取当前年份 let month = date.getMonth() + 1; /…

    JavaScript 2023年5月27日
    00
  • Cookie的使用及保存中文并用Cookie实现购物车功能

    下面是关于Cookie的使用及保存中文并用Cookie实现购物车功能的完整攻略。 什么是Cookie? Cookie是在Web服务器端存储在用户计算机上的一小段文本文件,它是HTTP协议的一部分,用于告诉服务器哪些请求来自于同一用户。服务器使用Cookie来存储用户的信息,包括登录状态、用户偏好、购物车中选中的商品等等。 Cookie有一个名称、一个值和其他…

    JavaScript 2023年6月11日
    00
  • JavaScript 日期和时间的格式化方法

    JS 日期和时间的格式化方法在开发中经常会用到,可以将日期和时间按照指定格式输出。下面是一份详细的攻略。 日期和时间的格式化方法 在JavaScript中,日期和时间可以使用 Date() 对象来表示。而要对日期进行格式化,就需要将 Date() 中的内容按照指定的格式进行输出。下面介绍三种常见的格式化方式。 1. 使用 toDateString() toD…

    JavaScript 2023年5月27日
    00
  • JavaScript根据json生成html表格的示例代码

    下面我将详细讲解如何使用JavaScript根据JSON数据生成HTML表格的完整攻略。 前置知识 在了解这个示例代码之前,需要你掌握一些HTML、CSS和JavaScript的基础知识,同时了解JSON数据格式以及如何创建JavaScript数组和对象。如果你还不熟悉这些知识,请先学习一下。 示例代码 下面是一个根据JSON数据动态生成HTML表格的示例代…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部