StateMan:创建一个简单的SPA实例(二)
来源:互联网 发布:西南交大网络教育作业 编辑:程序博客网 时间:2024/06/09 23:38
这个实例是在实例一的基础上进行增加的一些新的功能
<!DOCTYPE html><html><head> <title>stateman路由测试</title> <script type="text/javascript" src="../js/stateman.js"></script></head><body> <h1>打开控制台console来查看日志信息</h1> <ul> <li><a href="#/app">/app</a></li> <li><a href="#/app/contact">/contact</a></li> <li><a href="#/app/contact/message">#/contact/message</a></li> <li><a href="#/app/contact/2?name=charles">/contact/2?name=charles</a></li> <li><a href="#/app/contact/2/setting">/contact/2/setting</a></li> <li><a href="#/app/contact/3/setting">/contact/3/setting</a></li> <li><a href="#/app/user">/app/user</a></li> </ul> <script type="text/javascript"> //1.创建stateman的实例 var stateman = new StateMan(); //2.配置stateman实例的属性(config)、 /** * 这里有五个生命周期相关的方法用来控制路由的逻辑, 它们都是可选择实现的 config.enter(option): 一个函数,当状态被进入时会被调用 config.leave(option): 一个函数,当状态被离开时会被调用 config.update(option): 一个函数,当状态更新时会被调用, 更新的意思是,路径有变化,但是此状态仍未被退出. config.canEnter(option): 请求是否可进入 config.canLeave(option): 请求是否可退出 以下只用三个方法用于说明 */ var config_obj = { enter:function(option){ console.log("enter:" + this.name);//print: enter:'app' console.log("param:" + JSON.stringify(option.param));//print:'param:{}' }, leave:function(option){ console.log("leave:" + this.name);//print: leave:'app' console.log("param:" + JSON.stringify(option.param));//print:'param:{}' }, update:function(option){ console.log("update:" + this.name);//print: update:'app' console.log("param:" + JSON.stringify(option.param));//print:'param:{}' } } // var config_fun = function(o){ console.log(o); o.enter = o.enter || config_obj.enter; o.leave = o.leave || config_obj.leave; o.update = o.update|| config_obj.update; return o; } //3.增加一个state对象 stateman.state({ //配置多个对象 //key:用来匹配url //value:对不同url进行对应的操作 "app":config_obj, "app.contact":config_obj, //匹配./app/contact/:id(\d+)的url //option.url默认匹配规则:[-\$\w]+ "app.contact.params":config_fun({url:":id(\\d+)"}), "app.contact.params.setting":config_obj, "app.user":config_fun({ enter:function(option){ var done = option.async(); console.log(this.name+"1s later go into next state"); setTimeout(done,1000); }, leave:function(option){ console.log(this.name + ", 1s later to leave out"); return new Promise(function(resolve){ setTimeout(resolve, 1000) }); } }) }).on("notfound",function(){//创建监听器,如果未匹配到url //跳转页面 this.go('app'); }).start();//启动stateman, 路由开始 </script></body></html>
最终效果
以下面的url为例
<a href="#/app/contact/2?name=charles">/contact/2?name=charles</a>
浏览器地址栏
输出的对象o{url:”:id(\d+)”}
输出结果
0 0
- StateMan:创建一个简单的SPA实例(二)
- StateMan:创建一个简单的SPA实例(一)
- simple-spa 一个简单的单页应用实例
- simple-spa 一个简单的单页应用实例
- simple-spa 一个简单的单页应用实例
- simple-spa 一个简单的单页应用实例
- web component 【Template】 创建自己的简单SPA应用
- 创建一个简单BP的实例
- 创建一个简单的SVG动画实例
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之二
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之二
- 创建一个简单的WCF程序(二)
- sql plus创建一个简单的存储过程实例
- 利用Maven快速创建一个简单的spring boot 实例
- 一个简单的hibernate实例(之二)
- 创建webservice的简单实例
- fullcalendar创建的一个实例
- 使用Qml创建各种list(二)创建一个简单的动态列表
- Linux基础知识总结
- ZJNU 1712 树状数组
- 模仿艺龙手风琴效果
- HDU1098 Ignatius's puzzle(数学归纳法求解)(数论)
- delphi 对文件的基本打开关并读写操作 Rewrite、Append、Reset
- StateMan:创建一个简单的SPA实例(二)
- redis集群(主从配置)
- 入职一周
- Spark on YARN配置日志Web UI
- 多线程同步(信号量,互斥锁,条件变量)
- 网格聚类算法(二)
- 多个窗口的创建
- (PAT)1114. Family Property(并查集)
- 什么是DevOps