用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 MD5加密实现代码
Mar 15 Javascript
JS面向对象编程之对象使用分析
Aug 19 Javascript
Javascript操作cookie的函数代码
Oct 03 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
jquery实现倒计时功能
Dec 28 Javascript
BootStrap 附加导航组件
Jul 22 Javascript
jquery删除数组中重复元素
Dec 05 Javascript
Bootstrap select多选下拉框实现代码
Dec 23 Javascript
vue.js select下拉框绑定和取值方法
Mar 03 Javascript
浅谈Vue.js路由管理器 Vue Router
Aug 16 Javascript
详解Vue、element-ui、axios实现省市区三级联动
May 07 Javascript
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
详解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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
用PHP伪造referer突破网盘禁止外连的代码
2008/06/15 PHP
使用php计算排列组合的方法
2013/11/13 PHP
php中session退出登陆问题
2014/02/27 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
用javascript实现的仿Flash广告图片轮换效果
2007/04/24 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
2019/07/11 jQuery
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
简单了解Django ContentType内置组件
2019/07/23 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
城市观光通行证:The Sightseeing Pass
2018/04/28 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
汽车销售员如何做职业生涯规划
2014/02/16 职场文书
气象学专业个人求职信
2014/04/22 职场文书
纪检部部长竞选稿
2015/11/21 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers