用director.js实现前端路由使用实例
director.js是什么?
理解:前端的route框架,director.js客户端的路由注册/解析器,在不刷新的情况下,利用“#”号组织不同的URL路径,并根据不同的URL路径进行不同的方法调用。意思就是有什么样的路径就有什么样的方法。
场合:客户端浏览器和node.js的服务器应用。非常适合用来开发不需要刷新的单页面应用程序以及node.js应用。
兼容性:不依赖与任何库。例如jquery等。但它又和jquery能很好的融合在一起;
客户端的路由:
客户端的路由(也称为哈希路由)允许您指定一些关于使用URL应用状态的信息,当用户指定固定的URL,进行相应的页面显示。
简单例子
1.单独使用
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>AGentleIntroduction</title>
<script
src="https://rawgit.com/flatiron/director/master/build/director.min.js">
</script>
<script>
varauthor=function(){console.log("author");};
varbooks=function(){console.log("books");};
varviewBook=function(bookId){
console.log("viewBook:bookIdispopulated:"+bookId);
};
varroutes={
'/author':author,
'/books':[books,function(){
console.log("Aninlineroutehandler.");
}],
'/books/view/:bookId':viewBook
};
varrouter=Router(routes);
router.init();
</script>
</head>
<body>
<ul>
<li><ahref="#/author">#/author</a></li>
<li><ahref="#/books">#/books</a></li>
<li><ahref="#/books/view/1">#/books/view/1</a></li>
</ul>
</body>
</html>
2当与jquery相结合
<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>AGentleIntroduction2</title>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<script
src="https://rawgit.com/flatiron/director/master/build/director.min.js">
</script>
<script>
$('document').ready(function(){
//
//createsomefunctionstobeexecutedwhen
//thecorrectrouteisissuedbytheuser.
//
varshowAuthorInfo=function(){console.log("showAuthorInfo");};
varlistBooks=function(){console.log("listBooks");};
varallroutes=function(){
varroute=window.location.hash.slice(2);
varsections=$('section');
varsection;
section=sections.filter('[data-route='+route+']');
if(section.length){
sections.hide(250);
section.show(250);
}
};
//
//definetheroutingtable.
//
varroutes={
'/author':showAuthorInfo,
'/books':listBooks
};
//
//instantiatetherouter.
//
varrouter=Router(routes);
//
//aglobalconfigurationsetting.
//
router.configure({
on:allroutes
});
router.init();
});
</script>
</head>
<body>
<sectiondata-route="author">AuthorName</section>
<sectiondata-route="books">Book1,Book2,Book3</section>
<ul>
<li><ahref="#/author">#/author</a></li>
<li><ahref="#/books">#/books</a></li>
</ul>
</body>
</html>
Director支持commond的书写方式
例子如下:
vardirector=require('director');
varrouter=newdirector.cli.Router();
router.on('create',function(){
console.log('createsomething');
});
router.on(/destroy/,function(){
console.log('destroysomething');
});
//Youwillneedtodispatchthecliargumentsyourself
router.dispatch('on',process.argv.slice(2).join(''));
初始化及路由器的注册
varrouter=Router(routes);
另外,构造方法中传入的routes参数是一个路由对象,它是一个具有键值对结构的对象,可以被多层的嵌套。键对对应的URL中传入的路径,一般一个键值对应按照分割符切割后的某一部分;而键值对的值对应的该路径的需要触发的回调函数名。回调函数要在路由表对象使用前先声明,否则js会报错。
另外,回调函数除非特殊情况,一般不推荐使用匿名函数,请尽量先声明后使用。
varroutes={
'/dog':bark,
'/cat':[meow,scratch]
};
这里的的url是#dog和#cat
声明Router对象后,需要调用init()方法进行初始化,如:
router.init();
路由的事件
路由事件是路由注册表中一个有固定命名的属性,是指当路由方法router.dispatch()被调用时,路由匹配成功的时定义的需要触发的回调方法(允许定义多个回调方法)。上文即时注册功能里的"on"方法就是一个事件。具体信息如下:
on:当路由匹配成功后,需要执行的方法
before:在触发“on”方法之前执行的方法
仅在客户端有效的方法:
after:当离开当前注册路径时,需要执行的方法
once:当前注册路径仅执行一次的方法
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。