您好,欢迎来到酷升汽车网。
搜索
您的当前位置:首页js实现自定义路由

js实现自定义路由

来源:酷升汽车网


本文实现自定义路由,主要是事件hashchange的使用,然后根据我们的业务需求封装。

首先实现一个router的类,并实例化。

function _router(config){
 this.config = config ? config : {}; 
} 
_router.prototype = {
 event:function(str,callback){
 var events = str.split(' ');
 for (var i in events) window.addEventListener(events[i],callback,false);
 },
init: function() {
 this.event('load hashchange',this.refresh.bind(this));
 return this;
},
refresh: function() {
 this.currentUrl = location.hash.slice(1) || '/';
 this.config[this.currentUrl]();
},
route: function(path,callback){
 this.config[path] = callback || function(){};
}
}
function router (config){
 return new _router(config).init();
}

上边唯一需要注意的是,在使用addEventListener的时候,需要注意bind函数的使用,因为我是踩了坑,这才体会到$.proxy()。

上边使用的时候可以使用两种方法进行注册,但第二种是依赖第一种的。

方法一:

var Router = router({
 '/' : function(){content.style.backgroundColor = 'white';},
 '/1': function(){content.style.backgroundColor = 'blue';},
 '/2': function(){content.style.backgroundColor = 'green';}
})

方法二:

Router.route('/3',function(){ content.style.backgroundColor = 'yellow'; })

完整代码:

<html>
 <head>
 <title></title>
 </head>
 <body>
 <ul>
 <li><a href="#/1">/1: blue</a></li>
 <li><a href="#/2">/2: green</a></li>
 <li><a href="#/3">/3: yellow</a></li>
 </ul>
 <script>
 var content = document.querySelector('body');
 function _router(config){
 this.config = config ? config : {}; 
 } 
 _router.prototype = {
 event:function(str,callback){
 var events = str.split(' ');
 for (var i in events) window.addEventListener(events[i],callback,false);
 },
 init: function() {
 this.event('load hashchange',this.refresh.bind(this));
 return this;
 },
 refresh: function() {
 this.currentUrl = location.hash.slice(1) || '/';
 this.config[this.currentUrl]();
 },
 route: function(path,callback){
 this.config[path] = callback || function(){};
 }
 }
 function router (config){
 return new _router(config).init();
 }
 var Router = router({
 '/' : function(){content.style.backgroundColor = 'white';},
 '/1': function(){content.style.backgroundColor = 'blue';},
 '/2': function(){content.style.backgroundColor = 'green';}
 })
 Router.route('/3',function(){
 content.style.backgroundColor = 'yellow';
 })
 </script>
 </body>
</html>
<script> 
</script>

Copyright © 2019- kushenhuo.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务