说一下前端路由实现的简要原理,以 hash 形式(也可以使用 History API 来处理)为例,
当 url 的 hash 发生变化时,触发 hashchange 注册的回调,回调中去进行不同的操作,进行不同的内容的展示。

 function Router(){
this.routes = {};
this.curUrl = ''; this.route = function(path, callback){
this.routes[path] = callback || function(){};
}; this.refresh = function(){
this.curUrl = location.hash.slice(1) || '/';
this.routes[this.curUrl]();
}; this.init = function(){
window.addEventListener('load', this.refresh.bind(this), false);
window.addEventListener('hashchange', this.refresh.bind(this), false);
}
}

上面代码中路由系统Router对象实现,主要提供三个方法:

init 监听浏览器 url hash 更新事件。

route 存储路由更新时的回调到回调数组routes中,回调函数将负责对页面的更新。

refresh 执行当前url对应的回调函数,更新页面。

Router调用方式如下:点击触发 url 的 hash 改变,并对应地更新内容,运行后你会发现每次点击菜单时,#result中会变换背景色和内容。

 var R = new Router();
R.init();
var res = document.getElementById('result'); R.route('/', function() {
res.style.background = 'blue';
res.innerHTML = '这是首页';
});
R.route('/product', function() {
res.style.background = 'orange';
res.innerHTML = '这是产品页';
});
R.route('/server', function() {
res.style.background = 'black';
res.innerHTML = '这是服务页';
});
以上为一个前端路由的简单实现,实际应用中,应该对hash进行正则匹配处理,以满足大量url的应用,
同时增加ajax异步请求页面内容等功能。虽然这个实例非常简单,但实际上很多路由系统的根基都立于此,
其他路由系统主要是对自身使用的框架机制进行配套及优化。

最新文章

  1. JavaScript深入浅出6-函数和作用域
  2. 【Alpha阶段】第三次Scrum例会
  3. [转]c++流缓冲---rdbuf()
  4. UVALive 4255 Guess
  5. 《A First Course in Abstract Algebra with Applications》-chaper1-数论
  6. 飘窗代码修改了一段js
  7. SQL语句优化汇总(上) 感动啊 学习 收藏了
  8. SharePoint BCS
  9. Week2(9月16日):动手做个简单的例子
  10. 重磅︱R+NLP:text2vec包——New 文本分析生态系统 No.1(一,简介)
  11. linux文件访问权限(像rw-r--rw-是什么意思)
  12. Pycharm Debug调试心得
  13. SQL SERVER启动步骤
  14. weblogic 整合cxf 报错:cannot create a secure XmlInputFactory
  15. PCA和SVD最佳理解
  16. SQLite中的FROM子句
  17. CSS3 Flexbox可视化指南
  18. Overclock STM32F4 device up to 250MHz
  19. Sql Server Compact 4.0数据库部署安装
  20. Windows运行命令集锦

热门文章

  1. java.lang.RuntimeException: JPedal Trial has now expired
  2. openstack setup demo Identity service
  3. Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)
  4. sonar做代码检测时如何忽略一些代码文件
  5. muduo定时器、多线程模型及epoll的封装
  6. php删除数组中指定值的元素
  7. chorme requestBody
  8. NHibernate之旅(8):巧用组件之依赖对象
  9. java Bean及其使用
  10. http trigger 事件源是事件的生产者,函数是事件的处理者