最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js实现自定义路由

来源:动视网 责编:小采 时间:2020-11-27 20:25:32
文档

js实现自定义路由

js实现自定义路由:本文实现自定义路由,主要是事件hashchange的使用,然后根据我们的业务需求封装。首先实现一个router的类,并实例化。function _router(config){ this.config = config config : {}; } _router.prototype = { event:f
推荐度:
导读js实现自定义路由:本文实现自定义路由,主要是事件hashchange的使用,然后根据我们的业务需求封装。首先实现一个router的类,并实例化。function _router(config){ this.config = config config : {}; } _router.prototype = { event:f


本文实现自定义路由,主要是事件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>

文档

js实现自定义路由

js实现自定义路由:本文实现自定义路由,主要是事件hashchange的使用,然后根据我们的业务需求封装。首先实现一个router的类,并实例化。function _router(config){ this.config = config config : {}; } _router.prototype = { event:f
推荐度:
标签: 路由器 实现 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top