用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和php如何获取当前url的内容
Sep 22 Javascript
jquery ajax属性async(同步异步)示例
Nov 05 Javascript
简单的代码实现jquery定时器
Nov 17 Javascript
jquery实现九宫格大转盘抽奖
Nov 13 Javascript
JavaScript File分段上传
Mar 10 Javascript
js canvas仿支付宝芝麻信用分仪表盘
Nov 16 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
Apr 27 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
js构建二叉树进行数值数组的去重与优化详解
Mar 26 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
Nov 09 Javascript
详解Vite的新体验
Feb 22 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
php中通过smtp发邮件的类,测试通过
2007/01/22 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
解决laravel5.4下的group by报错的问题
2019/10/16 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
使用javascript控制cookie显示和隐藏背景图
2014/02/12 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
JavaScript获得url查询参数的方法
2015/07/02 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
nodejs模块nodemailer基本使用-邮件发送示例(支持附件)
2017/03/28 NodeJs
AngularJS中ng-class用法实例分析
2017/07/06 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
JavaScript数据结构与算法之检索算法示例【二分查找法、计算重复次数】
2019/02/22 Javascript
实例详解vue中的$root和$parent
2019/04/29 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[01:09:50]VP vs Pain 2018国际邀请赛小组赛BO2 第二场
2018/08/20 DOTA
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
解决redis与Python交互取出来的是bytes类型的问题
2020/07/16 Python
英国著名的小众美容品牌网站:Alyaka
2017/08/08 全球购物
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
积极分子思想汇报
2014/01/04 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
拙作再改《我的收音机情缘》
2022/04/05 无线电
实现GO语言对数组切片去重
2022/04/20 Golang