前端路由之 Hash 路由
2018-01-31 11:21
197 查看
Hash 路由的实现
使用过框架路由的人肯定都有注意到url中的#号,这个#号就是哈希,为什么hash路由页面不会跳转——还记得a链接的锚点是怎么实现的吗。
多个路由集中处理匹配对应路由
利用回调处理相应的逻辑
代码
<ul> <li><a href="#/">index</a></li> <li><a href="#/item">item</a></li> <li><a href="#/list">list</a></li> </ul> <br> <br> <div>头部</div> <h1 class='result'></h1> function Router() { // 路由储存 this.routes = {}; // 当前路由 this.currentUrl = ''; } Router.prototype = { // 路由处理 route: function (path, callback) { this.routes[path] = callback || function(){}; }, // 页面刷新 refresh: function () { // 当前的hash值 this.currentUrl = location.hash.slice(1) || '/'; // 执行hash值改变后相对应的回调函数 this.routes[this.currentUrl](); }, // 页面初始化 init: function () { // 页面加载事件 window.addEventListener('load', this.refresh.bind(this), false); // hash 值改变事件 window.addEventListener('hashchange', this.refresh.bind(this), false); } } // 全局挂载 window.Router = new Router(); // 初始化 window.Router.init(); let obj = document.querySelector('.result'); function changeConent (cnt) { obj.innerHTML = cnt } // 匹配路由做相应的操作 Router.route('/', () => { changeConent("当前是首页"); }) Router.route('/item', () => { changeConent('当前是item页面'); }) Router.route('/list', () => { // ajax 的数据就可以这样去拼接 setTimeout(() => { obj.innerHTML = '<h1 style="color: red">Hello World</h1>' }, 1000) })
相关文章推荐
- 前端路由之hash,以及iframe页面直接传参
- 简单的基于hash和hashchange的前端路由
- hash实现前端路由实例及addEventListener事件监听里回调函数的this指向问题
- 通过hash实现前端路由
- 前端路由的两种模式: hash 模式和 history 模式
- js实现简单前端路由--hash方式
- hash模式实现前端路由
- JS单页面应用实现前端路由(hash)
- 前端路由以及浏览器回退,hash & history & location
- 自己动手写一个前端路由插件
- 各种前端框架中的路由原理解析
- 前端路由实现与 react-router 源码分析
- Magento路由分发过程解析(一):在前端控制器中获取路由对象
- 利用pushState, popState和location.hash等方法自己实现一个小型路由
- ANGULARJS前端路由的基本原理
- Web开发中 前端路由 实现的几种方式和适用场景
- 利用HASH写的一个简单路由
- angularjs 路由---angularjs 搭建前端框架
- [angularjs] 前端路由实现单页跳转
- 前端路由