zoukankan      html  css  js  c++  java
  • 前端路由

    1.什么是前端路由?

    • 路由是根本不同的Url地址展示不同的内容或页面
    • 前端路由就是把不同路由对应不同的内容或页面的任务交给前端来做,之前是通过服务端根据url不同返回不同的页面来实现。

    2.什么时候使用端着路由?

    • 在单页面应用,大部分页面结构不变,只改变部分内容的时候使用

    3.前端路由有什么优点和缺点?

      优点:用户体验好,不需要每次都从服务器全部获取,快速展现给用户

      缺点:使用浏览器的前进,后退键的时候会重新发送请求,没有合理地利用缓存,



    如何用JavaScript实现前端路由

    html部分:

    <div class="container"> 
        <nav class="mainMenu"> 
            <ul> 
                <li><a href="#/">首页</a></li> 
                <li><a href="#/page1">页面1</a></li>
                <li><a href="#/page2">页面2</a></li> 
                <li><a href="#/page3">页面3</a></li> 
            </ul> 
        </nav>
         <div class="content"></div> 
    </div>                

    这里有几个带#号的锚链接,点击不同的锚链接url里会产生不同的hash,如#/page1、#/page2等,这个值可以通过location.hash获取。

    同时,每次hash的变化我们还可以通过onhashchange事件来监听,然后做出相应的处理,下面就来看一下具体的实现:

    Router处理的核心代码:

    ;(function () {
        function Router () {} 
        Router.prototype.route = function ( path, callback ) { 
            var url = location.hash.slice(1) || '/'; // 刷新时的处理  
            window.addEventListener('load', function () { 
                if ( url == path ) {    
                    callback&&callback(); 
                } 
            }, false); // hash变化时的处理
            window.addEventListener('hashchange', function () { 
                url = location.hash.slice(1) || '/'; 
                if ( url == path ) { 
                    callback&&callback(); 
                } 
            }, false); 
        }; 
        window.Router = new Router(); 
    })();    

    Router注册,注册方式就是Router.route(path, callback)的格式:

    var content = document.querySelectorAll('.content'); // 测试函数,这里可以放一些ajax处理之类的 
    function loadContent ( text ) { 
        content[0].innerHTML = text; 
    }
     // 注意:这里的path要和html里面锚链接对应
     // 如:‘#/’对应‘/’, '#/page2'对应'/page2' 
    Router.route('/', function () {
        loadContent('这是首页'); 
    });
    Router.route('/page1', function () { 
        loadContent('这是页面1'); 
    }); Router.route('/page2', function () { 
        loadContent('这是页面2'); 
    });
     Router.route('/page3', function () {
        loadContent('这是页面3'); 
    });



  • 相关阅读:
    这年头学爬虫还就得会点 scrapy 框架
    【全栈之路】JAVA基础课程十_JAVA虚拟机(20190706v1.1)
    牛客练习赛61
    ERD图
    深入理解Java虚拟机-如何利用VisualVM对高并发项目进行性能分析
    阿里研究员吴翰清:世界需要什么样的智能系统?
    《深入理解 C# (第2版)》
    HtmlAgility 抓取网页上的数据
    abp(net core)+easyui+efcore实现仓储管理系统——入库管理之三存储过程(三十九)
    如何Tomcat完美访问web项目,无需配置“项目名”
  • 原文地址:https://www.cnblogs.com/myzy/p/6117761.html
Copyright © 2011-2022 走看看