用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 获取指定标签的对象及属性的设置与移除
May 29 Javascript
Bootstrap每天必学之简单入门
Nov 19 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
Sep 01 Javascript
jQuery下拉菜单的实现代码
Nov 03 Javascript
微信小程序 解析网页内容详解及实例
Feb 22 Javascript
ligerUI---ListBox(列表框可移动的实例)
Nov 28 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
Aug 25 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 Javascript
小程序页面动态配置实现方法
Feb 05 Javascript
vue多个元素的样式选择器问题
Nov 29 Javascript
详解vue3.0 的 Composition API 的一种使用方法
Oct 26 Javascript
vue3+typeScript穿梭框的实现示例
Dec 29 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
星际争霸兵种名称对照表
2020/03/04 星际争霸
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
php常用hash加密函数
2014/11/22 PHP
示例详解Laravel重置密码代码重构
2016/08/10 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
javascript eval函数深入认识
2009/02/21 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
简单实现轮播图效果的实例
2016/07/15 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
js实现倒计时秒杀效果
2020/03/25 Javascript
vue实现带过渡效果的下拉菜单功能
2020/02/19 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
Python与Java间Socket通信实例代码
2017/03/06 Python
import的本质解析
2017/10/30 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
python命令行工具Click快速掌握
2019/07/04 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
Pytorch之parameters的使用
2019/12/31 Python
在Mac中PyCharm配置python Anaconda环境过程图解
2020/03/11 Python
英国最大的汽车配件在线商店:Euro Car Parts
2019/09/30 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
九年级历史教学反思
2014/01/27 职场文书
教师党性分析材料
2014/02/04 职场文书
社会工作专业自荐信
2014/09/26 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
Django migrate报错的解决方案
2021/05/20 Python
angular4实现带搜索的下拉框
2022/03/25 Javascript