用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代码格式化和语法着色V2
Oct 14 Javascript
jQuery选择没有colspan属性的td的代码
Jul 06 Javascript
html中的input标签的checked属性jquery判断代码
Sep 19 Javascript
Javascript基础教程之for循环
Jan 18 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
JS给Array添加是否包含字符串的简单方法
Oct 29 Javascript
详解Angular4 路由设置相关
Aug 26 Javascript
Angular7创建项目、组件、服务以及服务的使用
Feb 19 Javascript
详解小程序设置缓存并且不覆盖原有数据
Apr 15 Javascript
微信小程序引入Vant组件库过程解析
Aug 06 Javascript
javascript写一个ajax自动拦截并下载数据代码实例
Sep 07 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 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 5.0对象模型深度探索之对象复制
2008/03/27 PHP
php中$this-&amp;gt;含义分析
2009/11/29 PHP
PHP+jquery+ajax实现即时聊天功能实例
2014/12/23 PHP
jsTree树控件(基于jQuery, 超强悍)[推荐]
2009/09/01 Javascript
javascript中的数字与字符串相加实例分析
2011/08/14 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JavaScript Split()方法
2015/12/18 Javascript
深入理解JQuery中的事件与动画
2016/05/18 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
前端开发必知的15个jQuery小技巧
2017/01/22 Javascript
JAVA中截取字符串substring用法详解
2017/04/14 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
vue柱状进度条图像的完美实现方案
2019/08/26 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
详解vue 组件
2020/06/11 Javascript
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
Python面向对象之继承和多态用法分析
2019/06/08 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
Java面向对象面试题
2016/12/26 面试题
自考生自我鉴定范文
2013/10/01 职场文书
保险内勤岗位职责
2015/04/13 职场文书
学习杨善洲同志先进事迹心得体会
2016/01/23 职场文书
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis