为移动端开发提供纯前端的路由方案

市面上有大量的SPA框架,如AngularJs, backbone, Knockout等,对于追求极致小得移动端来说, 都比较大,重!

正在苦恼的时候,我们的wikieswan解决了这一问题。github地址:vipspa

使用方法非常的简单:

 1 <!doctype html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8" >
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
 6     <meta name="msapplication-tap-highlight" content="no">
 7     <meta content="yes" name="apple-mobile-web-app-capable">
 8     <meta content="black" name="apple-mobile-web-app-status-bar-style">
 9     <meta content="telephone=no" name="format-detection">
10     <title>vipspa demo</title>
11     <link rel="stylesheet" type="text/css" href="css/main.css">
12
13 </head>
14 <body>
15     <ul>
16         <li><a href="#home">首页</a></li>
17         <li><a href="#content">公司简介</a></li>
18         <li><a href="#contact">联系我们</a></li>
19     </ul>
20     <div  id="ui-view"></div>
21     <script type="text/html" id="error">
22         <!--可以自定义错误信息-->
23         <div>
24             {{errStatus}}
25         </div>
26         <div>
27             {{errContent}}
28         </div>
29     </script>
30
31     <script type="text/javascript" src="lib/zepto-1.1.4.min.js"></script>
32     <script type="text/javascript" src="lib/vipspa.js"></script>
33     <script type="text/javascript" src="js/require.vipspa.config.js"></script>
34 </body>
35 </html>

github 上有详细的使用介绍,在此不再赘述。

下面我们研究下源码。

vipspa.js

首先看下基本的代码结构:

 1 (function() {
 2     // 构造函数
 3      function Vipspa(){
 4
 5     };
 6
 7     //中间部分
 8     Vipspa.prototyp = {
 9         //....
10     };
11
12     window.vipspa = new Vipspa(); // 当然这块可以提取出来
13 }();//这块也可以做继续的改进

这是一个简单的模型模式。其中运用了匿名闭包,我们将简单的创建匿名函数,并立即执行。所有函数内部代码都在闭包内。它提供了整个应用生命周期的私有和状态。

如果我们想进一步扩展的话,可以把window.vipspa = new Vipspa();提取出来做进一步的扩展。

然后我们追踪构造函数原型的原型方法。

 1 var  routes = {
 2         view: ‘#ui-view‘,
 3         router: {
 4             ‘home‘: {
 5                 templateUrl: ‘views/home.html‘,
 6                 controller: ‘js/app/home.js‘
 7             },
 8             ‘content‘: {
 9                 templateUrl: ‘views/content.html‘,
10                 controller: ‘js/app/content.js‘
11             },
12             ‘contact‘: {
13                 templateUrl: ‘views/contact.html‘,
14                 controller: ‘js/app/contact.js‘
15             },
16             ‘defaults‘: ‘home‘ //默认路由
17         }
18     };

1 vipspa.start(routes);

是不是看上去有点熟悉,是的,就像 angularJs中的 ui-route 插件

好了看下Vipspa.prototype.start

1 var self = this;

这里可能会有疑问:为什么非得把this保存起来呢?这是因为,内部函数(比如本函数里面包含的两个匿名函数)

在搜索this变量时,只会搜索到属于它自己的this,而不会搜索到包含它的那个函数的this。

所以,为了在内部函数能使用外部函数的this对象,要给它赋值了一个名叫self的变量。

在 self 对象 中 设置了 routerMap(routes中的router) 和 mainView(routes中的view) 属性

然后执行startRouter函数,当锚部分发生变化时(window.onhashchange)再次执行startRouter函数

下面我们看startRouter函数做了什么?

1 var hash = location.hash;
2         var routeObj = vipspa.parse(hash);
3         routerAction(routeObj);

这里需要说明下:

1.location是javascript里边管理地址栏的内置对象,比如location.href就管理页面的url,用location.href=url就可以直接将页面重定向url。而location.hash则可以用来获取或设置页面的标签值。比如http://domain/#admin的location.hash="#admin"。利用这个属性值可以做一些非常有意义的事情。

2.vipspa.parse(hash) 解析获取到得hash值

3. 执行关键函数 routerAction();

在 routerAction 中做了什么事情呢?

我们点击URL时希望做什么事情呢?,当然是执行该路由对应的html和js

我们通过ajax请求

1 <div  id="ui-view"></div>

刷新该视图,并加载对应的js(routerItem.controller)怎么加载对应的js呢?通过loadScript方法

通过脚本创建一个<script>元素,地址指向routerItem.controller,可在callback函数中执行所传入的数据。

该方法也可用于JSONP中得跨域。

好了,这个微框架先介绍到这里,欢迎大家指正和吐槽。

时间: 2024-11-08 19:04:58

为移动端开发提供纯前端的路由方案的相关文章

移动端开发适配总结

移动端开发适配2种方案总结 针对移动端适配的方案~ 一: 第一种方案是:所有的单位使用rem来适配:首先在页面上设置html的font-size的大小:如下我项目中的设置: html { font-size: 100px; } @media(min-width: 320px) { html { font-size: 100px; } } @media(min-width: 360px) { html { font-size: 112.5px; } } @media(min-width: 400p

移动端开发适配的2中方案

原文地址:http://www.cnblogs.com/tugenhua0707/p/5568734.html 针对移动端适配的方案~ 一: 第一种方案是:所有的单位使用rem来适配:首先在页面上设置html的font-size的大小:如下我项目中的设置: html { font-size: 100px; } @media(min-width: 320px) { html { font-size: 100px; } } @media(min-width: 360px) { html { font

移动端开发者眼中的前端开发流程变迁与前后端分离

写在最开始 移动端与前端的区别 前端开发的混沌时代 后端 MVC MVC 方案实现 MVC 的缺点与改进 前端只写 Demo HTML 模板 后端 MVC 架构总结 AJAX 与前端 MVC 前后端分离的缺点 双端 MVC 不统一 SEO 性能不够 集中 Or 分离 Nodejs 前后端分离的哲学 Nodejs 分层 实战应用 风险控制 总结 参考资料 写在最开始 这是一篇面向移动端开发者的科普性文章,从前端开发的最初流程开始,结合示范代码,讨论开发流程的演变过程,希望能覆盖一部分前端开发技术栈

HTML5-前端开发很火且工资很高?

一 前言 晚上逛论坛看到一篇对从事HTML5前端开发的文章写的非常不错,和目前的市场形势差不多,然后我在其基础上给大家进行加工总结一下分享给大家.今天我们谈论的话题是<<为什么从事HTML5前端开发越来越火,工资高,并且还涨的快>>,针对这个问题进行分析分析. 俗话说的好:"没有调查,就没有发言权",同样在市场浪潮中,同样如果没有实际调查,不要轻易发表言论,误导他人. 现在主要从下面几个方面给大家进行总结和分析呢? 二 目录 HTML5前端开发的薪资 市场的供求

.NET服务端开发—多线程使用小结(多线程使用常识)

有一段时间没有更新博客了,最近半年都在着写书<.NET框架设计-大型企业级框架设计艺术>,很高兴这本书将于今年的10月份由图灵出版社出版,有关本书的具体介绍等书要出版的时候我在另写一篇文行做介绍.可以先透露一下,本书是博主多年来对应用框架学习的总结,里面包含了十几个重量级框架模式,这些模式都是我们目前所经常使用到的,对于学习框架和框架开发来说是很好的参考资料,大家敬请期待. 好了,进入文章主题. 最近几个月本人一直从事着SOA服务开发工作,简单点讲就是提供服务接口的:从提供前端接口WEBAPI

移动开发 or web 前端?

之前写了一篇文章「微信小程序」有哪些冲击与机会?,然后公众号后台一大堆同学问我这么一个问题,说正在准备或者已经在学习 Android 开发了,看完我的文章感觉很恐慌,更加难以选择了. 其实在微信小程序出来之前,就有不少同学问我关于 web 前端与移动开发的选择问题,只不过微信小程序出来了,微信的影响力不得不值得关注,这个问题就被放大了,所以,今天单独写篇文章来解答下你们的困惑. 1. 编程基础是通的 首先我们要有这么一个意识,就是只要从事编程,不管你选择什么方向,web 前端.Android.i

移动前端开发和 Web 前端开发的区别

pc,我们需要考虑什么呢?有点开发经验的同学都知道,ie6-11,firefox,chrome,safari都得兼容的吧.哪个都够你吃一壶的,无论是css还是js.mobile的网页开发,我们需要考虑什么呢?就目前来说,我们只需要考虑webkit内核的浏览器和chrome,uc,qq,小米手机浏览器 ok,单纯说pc和移动端开发的区别,其实也就是这个,可以简单的概括来说,mobile端的网页开发比pc端的网页开发,更简单一些.[页面小了啊,装的东西少了,css和html写的少了吧]交互简单一些[

备:移动端开发资源和小技巧

(在github上看到的,转摘而来,如果有版权问题请联系我[email protected]) mobileTech A useful tools or tips list for mobile web application developing 这个项目收集移动端开发所需要的一些资源与小技巧 移动端统计 (from BiosSun) 可基于下方所列出的统计数据来决定您要兼容的设备及浏览器. 百度移动统计 友盟指数 CNZZ 桌面及移动端浏览器统计 全球移动端浏览器统计 工具类网站 HTML5

Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇——纯前端多页面)

Vue 2.x + Webpack 3.x + Nodejs 多页面项目框架(上篇--纯前端多页面) @(HTML/JS) 一般来说,使用vue做成单页应用比较好,但特殊情况下,需要使用多页面也有另外的好处.例如手Q的多webview架构,新开页面有利于ios右划返回,也避免了返回时页面的刷新. 所以,这里我们探讨一下如何配置实现多页面的项目框架.这里是开篇,先以最简单的纯前端多页面为例入手,最终目标是完成Node.js多页面直出+前后端同构的架构. 本文源代码:https://github.c