zoukankan      html  css  js  c++  java
  • 简易基础版单页面应用

    写在开头:

    在网上看到一篇介绍实现简易基础版单页面应用的分享,贴上原地址:  
    [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"
    
  • 相关阅读:
    数据挖掘实践(20):算法基础(三)SVM(支持向量机)算法
    数据挖掘实践(19):算法基础(二)Logistic回归(逻辑斯蒂)算法
    数据挖掘实践(18):算法基础(一)线性回归
    Flink 源码(三): Flink Client 实现原理与源码解析(二)
    Flink 源码(二): Flink Client 实现原理与源码解析(一)
    GIT基础(九):Git 远程仓库(Github)
    GIT基础(八):查看提交历史
    GIT基础(七):分支管理
    GIT基础(六):Git 基本操作(一)
    rust thread
  • 原文地址:https://www.cnblogs.com/my93/p/5694697.html
Copyright © 2011-2022 走看看