【前端路由】
来源:互联网 发布:圆方铺砖软件破解版 编辑:程序博客网 时间:2024/04/28 10:25
查缺补漏,之前对于路由真的不太了解,今天算是恶补吧。内推阶段就是要发现自己的不足,然后赶紧查缺补漏,加油!
在单页面应用中,前端通常需要一套路由机制,这样当url发生变化时就可以做
出一些处理,从而让页面显示不同的内容。
1、什么是路由?
对于没有开发过后端,也没有开发过 SPA 的前端来说,路由这个名词可能会让人比较困惑,这里的路由并不是指「硬件路由」,也不是网络七层协议中的「网络层路由」,但是其思想原理是一样的:
从性能和用户体验的层面来说,后端路由每次访问一个新的页面都要向服务器发送请求,然后服务器再响应请求,这个过程会有延迟的
,而前端路由在访问一个新页面的时候仅仅是变换了一下路径而已,没有网络延迟。
无论是前端还是后端,我们看到的URL其实都是马甲,需要通过路由触发/执行真实需要执行的逻辑路径。
比如,服务器网络地址为 10.0.0.1,而该Web服务器又提供了三个可供用户访问的页面,其页面URI分别是:
http://10.0.0.1/http://10.0.0.1/abouthttp://10.0.0.1/concat
上述URI的路径就分别是
//about/concat
当用户使用http://10.0.0.1/about 来访问页面时,服务器会接收到这个请求,然后会解析URI中的路径,该路径对应着相应的处理逻辑,程序会把请求交给路径所对应的处理逻辑,这样就完成了一次路由分发,这个分发就是通过路由实现的。
2、前端路由
下面说一下实现的简要原理
以hash形式为例,当url的hash发生变化时,会触发hashchange注册的回调函数,回调函数中去进行不同的操作,进行不同的内容显示。具体代码如下:
//闭包形成块级作用域 (function () { function Router () {} //Router构造函数 //在原型中定义方法,为不同的path指定不同的回调函数 Router.prototype.route = function ( path, callback ) { var url = location.hash.slice(1) || '/'; //获取当前hash值 // 刷新时的处理 window.addEventListener('load', function () { if ( url == path ) { callback(); } }, false); // hash变化时的处理 window.addEventListener('hashchange', function () { url = location.hash.slice(1) || '/'; if ( url == path ) { callback(); } }, false); }; window.Router = new Router(); //创建Router对象作为window对象的属性 })();
Router的使用如下:
HTML结构:
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>单页面的路由</title></head><body> <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> <li><a href="#/page4">页面4</a></li> </ul> </nav> <div class="content"></div> </div></body></html>
Router的使用:
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'); }); Router.route('/page4', function () { loadContent('这是页面4'); });
完整代码可从github下载,这里只是简单的例子,我还要具体的学习React Router,所以博客还会继续更新。
参考博文:
从React Router谈谈前端路由的那些事
前端路由实现与 react-router 源码分析
- 前端路由
- 前端路由
- 【前端路由】
- 前端路由
- 前端路由
- 前端路由
- 前端路由与后端路由
- 前端路由与后端路由
- 前端路由与后端路由
- 前端路由与后端路由
- 前端路由与后端路由
- 前端路由和后端路由
- AngularJs的前端路由
- 前端路由实现
- 前端路由相关实现
- fetch&前端路由原理
- 前端路由设置
- 什么是前端路由
- ntlk入门函数解释(concordance, similar, common_contexts)
- DP-数字三角
- 巧用JS字符串的方法
- poj 1094 Sorting It All Out
- 统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
- 【前端路由】
- 解决Win10 64位下Source Insight提示未完整安装的问题(亲试有效)
- 数据库索引
- notes of Effective C++
- I/O多路复用
- Android框架:glide强大的图片加载库
- 2013长沙现场赛A - Alice's Print Service
- cookie共享于二级域名
- POJ 3662 Telephone Lines 电话线(二分答案+SPFA)