用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 相关文章推荐
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
js函数内变量的作用域分析
Jan 12 Javascript
jQuery检测输入的字符串包含的中英文的数量
Apr 17 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
node使用promise替代回调函数
May 07 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
element vue Array数组和Map对象的添加与删除操作
Nov 14 Javascript
JavaScript使用ul中li标签实现删除效果
Apr 15 Javascript
Node.js一行代码实现静态文件服务器的方法步骤
May 07 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 Javascript
如何使用vue3打造一个物料库
May 08 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
2021年最新CPU天梯图
2021/03/04 数码科技
PHP中session变量的销毁
2014/02/27 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
PHP实现对数字分隔加千分号的方法
2019/03/18 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
通过fastclick源码分析彻底解决tap“点透”
2017/12/24 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
微信小程序分包加载代码实现方法详解
2019/09/23 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
JS实现瀑布流效果
2020/03/07 Javascript
JS事件循环机制event loop宏任务微任务原理解析
2020/08/04 Javascript
Python multiprocessing.Manager介绍和实例(进程间共享数据)
2014/11/21 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
Django 实现下载文件功能的示例
2018/03/06 Python
python hook监听事件详解
2018/10/25 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
保加利亚服装和鞋类购物网站:Bibloo.bg
2020/11/08 全球购物
Java面试题:说出如下代码的执行结果
2015/10/30 面试题
校园十大歌手策划书
2014/02/01 职场文书
《中国的气候》教学反思
2014/02/23 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书