用director.js实现前端路由使用实例


Posted in Javascript onJanuary 27, 2017

director.js是什么?

理解:前端的route框架,director.js客户端的路由注册/解析器,在不刷新的情况下,利用“#”号组织不同的URL路径,并根据不同的URL路径进行不同的方法调用。意思就是有什么样的路径就有什么样的方法。

场合:客户端浏览器和node.js的服务器应用。非常适合用来开发不需要刷新的单页面应用程序以及node.js应用。

兼容性:不依赖与任何库。例如jquery等。但它又和jquery能很好的融合在一起;

客户端的路由:

客户端的路由 (也称为哈希路由) 允许您指定一些关于使用URL应用状态的信息,当用户指定固定的URL,进行相应的页面显示。

简单例子

1. 单独使用

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>A Gentle Introduction</title>
  <script
   src="https://rawgit.com/flatiron/director/master/build/director.min.js">
  </script>
  <script>
   var author = function () { console.log("author"); };
   var books = function () { console.log("books"); };
   var viewBook = function (bookId) {
    console.log("viewBook: bookId is populated: " + bookId);
   };
   var routes = {
    '/author': author,
    '/books': [books, function() {
     console.log("An inline route handler.");
    }],
    '/books/view/:bookId': viewBook
   };
   var router = Router(routes);
   router.init();
  </script>
 </head>
 <body>
  <ul>
   <li><a href="#/author">#/author</a></li>
   <li><a href="#/books">#/books</a></li>
   <li><a href="#/books/view/1">#/books/view/1</a></li>
  </ul>
 </body>
</html>

2当与jquery相结合

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>A Gentle Introduction 2</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() {
   //
   // create some functions to be executed when
   // the correct route is issued by the user.
   //
   var showAuthorInfo = function () { console.log("showAuthorInfo"); };
   var listBooks = function () { console.log("listBooks"); };
   var allroutes = function() {
    var route = window.location.hash.slice(2);
    var sections = $('section');
    var section;
    section = sections.filter('[data-route=' + route + ']');
    if (section.length) {
     sections.hide(250);
     section.show(250);
    }
   };
   //
   // define the routing table.
   //
   var routes = {
    '/author': showAuthorInfo,
    '/books': listBooks
   };
   //
   // instantiate the router.
   //
   var router = Router(routes);
   //
   // a global configuration setting.
   //
   router.configure({
    on: allroutes
   });
   router.init();
  });
  </script>
 </head>
 <body>
  <section data-route="author">Author Name</section>
  <section data-route="books">Book1, Book2, Book3</section>
  <ul>
   <li><a href="#/author">#/author</a></li>
   <li><a href="#/books">#/books</a></li>
  </ul>
 </body>
</html>

Director支持commond的书写方式

例子如下:

var director = require('director');
 var router = new director.cli.Router();
 router.on('create', function () {
  console.log('create something');
 });
 router.on(/destroy/, function () {
  console.log('destroy something');
 });
 // You will need to dispatch the cli arguments yourself
 router.dispatch('on', process.argv.slice(2).join(' '));

初始化及路由器的注册

var router = Router(routes);

另外,构造方法中传入的routes参数是一个路由对象,它是一个具有键值对结构的对象,可以被多层的嵌套。键对对应的URL中传入的路径,一般一个键值对应按照分割符切割后的某一部分;而键值对的值对应的该路径的需要触发的回调函数名。回调函数要在路由表对象使用前先声明,否则js会报错。

另外,回调函数除非特殊情况,一般不推荐使用匿名函数,请尽量先声明后使用。

  var routes = {
  '/dog': bark,  
  '/cat': [meow, scratch]
 };

这里的的url是#dog和#cat

声明Router对象后,需要调用init()方法进行初始化,如:

router.init();

路由的事件

路由事件是路由注册表中一个有固定命名的属性,是指当路由方法router.dispatch()被调用时,路由匹配成功的时定义的需要触发的回调方法(允许定义多个回调方法)。上文即时注册功能里的"on"方法就是一个事件。具体信息如下:

on :当路由匹配成功后,需要执行的方法

before:在触发“on”方法之前执行的方法

仅在客户端有效的方法:

after:当离开当前注册路径时,需要执行的方法

once: 当前注册路径仅执行一次的方法

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
cssQuery()的下载与使用方法
Jan 12 Javascript
JavaScript加密解密7种方法总结分析
Oct 07 Javascript
Javascript select下拉框操作常用方法
Nov 09 Javascript
JS 各种网页尺寸判断实例方法
Apr 18 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
Jan 09 Javascript
jquery实现select选中行、列合计示例
Apr 25 Javascript
node.js中的buffer.write方法使用说明
Dec 10 Javascript
Javascript中的数据类型之旅
Oct 18 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
May 09 Javascript
JavaScript探测CSS动画是否已经完成的方法
Aug 30 Javascript
ionic 自定义弹框效果
Jun 27 Javascript
node使用async_hooks模块进行请求追踪
Jan 28 Javascript
详解bootstrap的modal-remote两种加载方式【强化】
Jan 27 #Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
Jan 26 #Javascript
js监听input输入框值的实时变化实例
Jan 26 #Javascript
jquery实现input框获取焦点的简单实例
Jan 26 #Javascript
jquery 实时监听输入框值变化的完美方法(必看)
Jan 26 #Javascript
Jquery实时监听input value的实例
Jan 26 #Javascript
jquery实时获取时间的简单实例
Jan 26 #Javascript
You might like
基于MySQL体系结构的分析
2013/05/02 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
dreamweaver 安装Jquery智能提示
2011/04/02 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
Vue 2.0中生命周期与钩子函数的一些理解
2017/05/09 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
Vue自定义指令实现checkbox全选功能的方法
2018/02/28 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
Vue数据双向绑定的深入探究
2018/11/27 Javascript
详解a标签添加onclick事件的几种方式
2019/03/29 Javascript
微信小程序扫描二维码获取信息实例详解
2019/05/07 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
JavaScript Date对象功能与用法学习记录
2020/04/28 Javascript
Python CSV模块使用实例
2015/04/09 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
win7下 python3.6 安装opencv 和 opencv-contrib-python解决 cv2.xfeatures2d.SIFT_create() 的问题
2019/10/24 Python
python 轮询执行某函数的2种方式
2020/05/03 Python
css3类选择器之结合元素选择器和多类选择器用法
2017/03/09 HTML / CSS
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
会计电算化专业应届大学生求职信
2013/10/22 职场文书
简历中个人求职的自我评价模板
2013/11/29 职场文书
职业生涯规划怎么写
2013/12/29 职场文书
宣传工作经验材料
2014/06/02 职场文书
战友聚会策划方案
2014/06/13 职场文书
护士找工作求职信
2014/07/02 职场文书
同意落户证明
2015/06/19 职场文书