用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 相关文章推荐
解决jquery submit()提交表单提示:f[s] is not a function
Jan 23 Javascript
node+express+jade制作简单网站指南
Nov 26 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
Sep 01 Javascript
jQuery  ready方法实现原理详解
Oct 19 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
如何解决React官方脚手架不支持Less的问题(小结)
Sep 12 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
Feb 27 Javascript
javascript中undefined的本质解析
Jul 31 Javascript
layui富文本编辑器前端无法取值的解决方法
Sep 18 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
Sep 21 Javascript
Vue 样式切换及三元判断样式关联操作
Aug 09 Javascript
浏览器JavaScript调试功能无法使用解决方案
Sep 18 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
漂亮但不安全的CTB
2006/10/09 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
Javascript表达式中连续的 &amp;&amp; 和 || 之赋值区别
2010/10/17 Javascript
动态的改变IFrame的高度实现IFrame自动伸展适应高度
2012/12/28 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
javascript之IE版本检测超简单方法
2016/08/20 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
jQuery回调方法使用示例
2017/06/26 jQuery
vue组件横向树实现代码
2018/08/02 Javascript
vue移动端实现手机左右滑动入场动画
2020/06/17 Javascript
Python Property属性的2种用法
2015/06/21 Python
Python变量作用范围实例分析
2015/07/07 Python
Sanic框架Cookies操作示例
2018/07/17 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python中的heapq模块源码详析
2019/01/08 Python
在python下读取并展示raw格式的图片实例
2019/01/24 Python
Python常见数字运算操作实例小结
2019/03/22 Python
基于Python中的yield表达式介绍
2019/11/19 Python
Python+OpenCV实现将图像转换为二进制格式
2020/01/09 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
英国最大的海报商店:GB Posters
2018/03/20 全球购物
孕妇内衣和胸罩:Cake Maternity
2018/07/16 全球购物
美国购物网站:Clickhere2shop
2021/01/28 全球购物
平面设计岗位职责
2013/12/14 职场文书
酒店员工培训方案
2014/06/02 职场文书
上诉答辩状范文
2015/05/22 职场文书
生活小常识广播稿
2015/08/19 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis