用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如何把参数列严格转换成数组实现思路
Apr 01 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
Aug 02 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
Mar 28 Javascript
简单谈谈jQuery(function(){})与(function(){})(jQuery)
Dec 19 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
浅析Bootstrip的select控件绑定数据的问题
May 10 Javascript
Javascript中作用域的详细介绍
Oct 06 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
React中常见的动画实现的几种方式
Jan 10 Javascript
关于layui时间回显问题的解决方法
Sep 24 Javascript
JS数组方法reduce的用法实例分析
Mar 03 Javascript
js实现手表表盘时钟与圆周运动
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
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
php 实现银联商务H5支付的示例代码
2019/10/12 PHP
javascript 控制弹出窗口
2007/04/10 Javascript
input的focus方法使用
2010/03/13 Javascript
Javascript玩转继承(三)
2014/05/08 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
Linux下为Node.js程序配置MySQL或Oracle数据库的方法
2016/03/19 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
python操作CouchDB的方法
2014/10/08 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Django与JS交互的示例代码
2017/08/23 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
python几种常用功能实现代码实例
2019/12/25 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
安全事故检讨书
2014/01/18 职场文书
客户接待方案
2014/02/26 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
如何写辞职信
2015/05/13 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书