• 简易基础版单页面应用


    写在开头:

    在网上看到一篇介绍实现简易基础版单页面应用的分享,贴上原地址:  
    [https://segmentfault.com/a/1190000003786176](https://segmentfault.com/a/1190000003786176)。
    先是跟着文章中一步步实现,后面又加上了一些自己想法。
    

    基础代码

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>demo</title>
    </head>
    <body>
        <div id="app">
            <nav id="nav"></nav>
            <div id="container"></div>
        </div>
        <script type="text/javascript" src="js/jQuery.js"></script>
        <script type="text/javascript" src="js/app.js"></script>
    </body>
    </html>
    

    app.js

    var $nav = $("#nav");
    var sLi = ["home", "about", "article", "history"].reduce(function(pre, n) {
        return pre + "<li><a href='/" + n + "'>" + n + "</a></li>";
    }, "");
    var sUl = "<ul>" + sLi + "</ul>";
    $nav.html(sUl);
    
    var $container = $("#container");
    $("#nav ul li").on("click", function() {
        var route = $(this).find("a").text();
        history.pushState({ title: route }, route, route);
        show();
        return false;
    });
    
    function show() {
        var route = window.location.pathname;
        if (route === "/home" || route === "/") {
            $.get("/api/home", function(data) {
                $container.html(data.join("") + "!");
            });
        } else {
            $container.html("这是" + route + "区域哦");
        }
    }
    show();
    window.addEventListener("popstate", show);
    

    test.json

    {
        "lis": ["今", "天", "是", "个", "好", "天", "气"]
    }
    

    发现问题

        当地址栏的地址为:[http://127.0.0.1:8011/home]或者其他的时候刷新页面,页面显示404。因为我并没有home.html。所以对app.js做了一些调整
    
    var $nav = $("#nav");
    var sLi = ["home", "about", "article", "history"].reduce(function(pre, n) {
        return pre + "<li><a href='/" + n + "'>" + n + "</a></li>";
    }, "");
    var sUl = "<ul>" + sLi + "</ul>";
    $nav.html(sUl);
    
    var $container = $("#container");
    $("#nav ul li").on("click", function() {
        var route = $(this).find("a").text();
        history.pushState({ title: route }, null, "#/" + route);
        show();
        return false;
    });
    
    function show() {
        var route = window.location.hash;
        if (route === "#/home" || route === "" || route === "#/") {
            $.get("data/test.json", function(data) {
                $container.html(data.lis.join("") + "!");
            });
        } else {
            $container.html("这是" + route + "区域哦");
        }
    }
    show();
    window.addEventListener("popstate", show);
    
    

    分析修改内容

    1. history.pushState({ title: route }, null, "#/" + route);
       把地址改为"/#/XXX"。这是参考网易云音乐的pc网站,加了“#”,刷新的就是当前页面。
    
    2. var route = window.location.hash;
       地址改为"/#/XXX"之后,window.location.pathname获取得到的全部都是"/",window.location.hash获取的是"#/XXX"
    
  • 相关阅读:
    单元测试
    英语学习app案列分析
    基于GUI的四则运算
    个人作业1——四则运算题目生成程序(基于控制台)
    一种新体验———构建之法
    个人作业3——个人总结(Alpha阶段)
    单元测试
    英语学习APP案例分析
    结对编程(70,73)
    软件工程HW1-四则运算软件
  • 原文地址:https://www.cnblogs.com/my93/p/5694697.html
Copyright © 2020-2023  润新知