码迷,mamicode.com
首页 > 其他好文 > 详细

实现自定义路由

时间:2017-02-04 11:32:05      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:function   split   code   ati   var   for   style   query   pre   

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

 

实现自定义路由

标签:function   split   code   ati   var   for   style   query   pre   

原文地址:http://www.cnblogs.com/firegood/p/6364067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!