用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技巧来提高你的代码
Jan 08 Javascript
ajax 缓存 问题 requestheader
Aug 01 Javascript
JavaScript插件化开发教程(六)
Feb 01 Javascript
javascript图片预加载实例分析
Jul 16 Javascript
实例代码讲解jquery easyui动态tab页
Nov 17 Javascript
jquery实现移动端点击图片查看大图特效
Sep 11 Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
May 12 Javascript
Ionic项目中Native Camera的使用方法
Jun 07 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
Mar 05 Javascript
详解vue 图片上传功能
Apr 30 Javascript
MockJs结合json-server模拟后台数据
Aug 26 Javascript
html-webpack-plugin修改页面的title的方法
Jun 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
php中cookie的作用域
2008/03/27 PHP
php安装swoole扩展的方法
2015/03/19 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
textarea的value是html文件源代码,存成html文件的代码
2007/04/20 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
js判断iframe内的网页是否滚动到底部触发事件
2014/03/18 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
详解jQuery Mobile自定义标签
2016/01/06 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
Vue声明式渲染详解
2017/05/17 Javascript
react-router中的属性详解
2017/06/01 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
jQuery获取随机颜色的实例代码
2018/05/21 jQuery
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Django实现自定义404,500页面教程
2017/03/26 Python
Windows下python3.6.4安装教程
2018/07/31 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
Python K最近邻从原理到实现的方法
2019/08/15 Python
python集合删除多种方法详解
2020/02/10 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
HTML5时代CSS设置漂亮字体取代图片
2014/09/04 HTML / CSS
会计电算一体化个人简历的自我评价
2013/10/15 职场文书
幼儿园教师考核制度
2014/02/01 职场文书
房地产项目策划书
2014/02/05 职场文书
2014年技术工作总结范文
2014/11/20 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
千与千寻观后感
2015/06/04 职场文书
Go 自定义package包设置与导入操作
2021/05/06 Golang
python 批量压缩图片的脚本
2021/06/02 Python