用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 相关文章推荐
js中页面的重新加载(当前页面/上级页面)及frame或iframe元素引用介绍
Jan 24 Javascript
javascript获取网页中指定节点的父节点、子节点的方法小结
Apr 24 Javascript
jquery获取iframe中的dom对象(两种方法)
Jul 02 Javascript
jQuery中toggle()函数的使用实例
Apr 17 Javascript
javascript文本模板用法实例
Jul 31 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
Vue下拉框回显并默认选中随机问题
Sep 06 Javascript
Node.js 在本地生成日志文件的方法
Feb 07 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
Jan 11 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
php session安全问题分析
2011/06/24 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
取键盘键位ASCII码的网页
2007/07/30 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Vim快速合并行及vim 将文件所有行合并到一行
2017/11/27 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
vue中是怎样监听数组变化的
2020/10/24 Javascript
nuxt引入组件和公共样式的操作
2020/11/05 Javascript
Hadoop中的Python框架的使用指南
2015/04/22 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
浅谈Python2获取中文文件名的编码问题
2018/01/09 Python
python实现百万答题自动百度搜索答案
2018/01/16 Python
Python内存管理实例分析
2019/07/10 Python
Python的条件锁与事件共享详解
2019/09/12 Python
Python使用type动态创建类操作示例
2020/02/29 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
趣味比赛活动方案
2014/02/15 职场文书
大家访活动实施方案
2014/03/10 职场文书
个人维稳承诺书
2015/05/04 职场文书
创业计划书之书店
2019/09/10 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server
python识别围棋定位棋盘位置
2021/07/26 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电