单页应用

为了你能看懂这篇博客之后的所有内容,你必须知道什么是单页应用。

简单的讲,链接跳转时界面不会刷新应用就是单页应用。它的特点是,用户在浏览或者点击跳转的时候感觉不到界面的跳转过程,因为无需等待,所以能极大的提高用户的体验。

它的发展大致可以分为三个阶段。

第一阶段:没有ajax的时代

这个时间段,单页应用还没普及,网站大多采用传统的服务端渲染。每一个url、每一个表单提交,服务端都会返回一个完整的HTML文件。对于前端来说,可以做的事情无非就是布局、兼容、切片等工作。这个阶段如果想要模拟无刷新的体验,人们往往会使用frame标签将页面进行分割,每个部分都是一个HTML文件。这种方式缺点很明显:没办法回退;多个HTML页面的通信很复杂;对SEO不友好;分割页面的计算方式很复杂等等。优点也有一些,比如,各个HTML页面之间相互独立,代码之间的耦合度不大。

第二阶段:ajax的出现+location.hash

这个阶段的单页应用已经初现原型了。这个阶段也是前端各种mv*框架层出不穷的阶段,也是富应用客户端炒得最火的时候,各种MVC、MVVM框架开始流行,而服务端大多向restful方向靠拢了。JavaScript可以通过ajax发送request,可以监听url中`#`号部分的变化,这已经足够完成一个单页应用了。更有甚者,不需要hash,类似于一个tab切换,直接在浏览器内存中保存跳转记录也是可以的。这种做法的优点很明显,不需要分割页面,不需要用多个HTML,也支持回退等。缺点还是SEO的问题,因为只能监听和更改url中`#`号之后的内容,所以整个应用对于后台或者搜索引擎来说,只有一个链接。这种做法,时至今日,采用的人数还是比较多的,大多是一些对SEO要求不高的应用。因为从现在的眼光来看,这种做法的兼容性是最高的。

第三阶段:HTML5 history API的出现

这个阶段,由于HTML5的出现,各大浏览器也开始支持history API了,前端程序员可以完全的控制浏览器的URL了,所以各大MVC,MVVM框架也都支持通过history API来实现路由系统了,还支持优雅降级了。这种模式可以配合服务端将URL完全交由前端管理,这也是前端路由系统发展的主流方向。至此,单页应用的路由系统也才相对完善,只是这个API对于低版本的浏览器支持程度相对较低,一般的框架都会提供多种路由模式供使用者选择。不过,时代在发展,低版本浏览器早晚会被淘汰。

单页应用的路由系统

随着单页应用的流行,前端对于URL的管理也开始重视起来了。单页应用的路由系统,实质就是一个管理各种URL的管理器。每个URL对应一个HTML片段,或者交由一个controller/组件进行管理,跳转路由之后将HTML片段渲染至指定位置。接下来,我们看看现在两个主流框架的实现方法。

vue-router

vue中的router模块是跟vue的组件强相关的,每个route都对应一个组件进行管理,组件内容无非就是些UI操作上的内容。如下是vue-router官网的一个实例:

const router = new VueRouter({

routes: [

{ path: '/user/:id', component: User,

children: [

{          // 当 /user/:id/posts 匹配成功

// UserPosts 会被渲染在 User 的  中

path: 'posts',

component: UserPosts

}

]

}

]

})

component字段指定路由对应的渲染组件,没到匹配到相应的路由的时候,都会使用该组件将router-view组件的内容进行替换。另外,它支持三种路由模式:hash、history、abstract。若没有指定,模式采用的hash模式。更多的配置项可以参看vue-router中文官网。

react-router

react的router跟vue的大同小异,只不过它将router模块改写成了组件,引入router之后,只需要像操作组件那样操作router就行了。比如:

React.render((

), document.body)

上面代码的意思很明显,document.body为渲染区域,各个路径对应一个组件,匹配到路径之后就用对应组件渲染document.body。它支持的路由模式有:browserHistory、hashHistory、createMemoryHistory。具体使用还是建议大家参看react-router中文文档。

结语

经过上面这些讲解,我相信大多数人应该知道了什么是单页应用,为何需要路由系统,以及各种路由系统的之间的优劣好坏。如果在路由系统的选择和使用上,大家心里更有把握了,那么这篇文章就值得了!所有的这些,都是为下篇文章《前端单页应用的路由系统–实现篇》做的一个铺垫。

在撰写这篇文章之前,我已经简单的实现了两种路由模式。有兴趣的朋友可以提前参看我的GitHub:https://github.com/lizhiqianduan/single-page-app-router。后面几篇文章,我主要会讲解hash模式以及history模式的路由系统简单的实现方法,敬请期待!

打赏作者

xiaohei

微信支付

支付宝

php单页应用,前端单页应用的路由系统 – 介绍篇相关推荐

  1. 单页应用和多页应用的区别

    一.定义区分 [1.1]单页应用 单页应用又称 SPA(Single Page Application)指的是使用单个 HTML 完成多个页面切换和功能的应用.这些应用只有一个 html 文件作为入口 ...

  2. VUE单页面应用的内页很难被百度收录

    这两年自己写了几个WEB项目,前端都是用的vue框架,后台大部分用的nodejs,也有用的spring的:但是他们有一个共同点:都是SPA单页面应用,并且使用HEXO框架在二级目录搭建了一个静态博客. ...

  3. 单页应用 vs 多页应用

    web项目可分为单页应用 和 多页应用.单页应用,就是只有一个页面,其他内容,估计就是动态加载,用从加载其他页面片段 + 请求后台 这种方式来完成.这么一说,我之前做的,其实都是多页应用. 相比之下, ...

  4. 静态HTML网页设计作品 HTML5+CSS大作业——明星个人-赵丽颖(7页)带表单带音乐表格布局

    HTML5+CSS大作业--明星个人-赵丽颖(7页)带表单带音乐表格布局 常见网页设计作业题材有 个人. 美食. 公司. 学校. 旅游. 电商. 宠物. 电器. 茶叶. 家居. 酒店. 舞蹈. 动漫. ...

  5. php 单页应用,有关单页应用的体验问题

    ---恢复内容开始--- ##什么是单页应用 所谓单页应用,指的是在一个页面上集成多种功能,甚至整个系统就只有一个页面(一个html),所有的业务功能都是它的子模块,通过特定的方式挂接到主界面上. # ...

  6. 简述vue单页应用与多页应用的区别

    简述vue单页应用与多页应用的区别 文章目录 简述vue单页应用与多页应用的区别 前言 一.Vue单页应用是什么? 内部原理: 二.Vue多页应用是什么? 内部原理: 三.它俩有啥区别? 四.总结 前 ...

  7. 将表单请求提交到本页

    在Web应用程序中,有时需要将表单请求提交到本页进行处理 实现将表单提交到本页,只要将表单的action属性设置为本页即可,假定表单页为index.jsp ,那么action的值为index.jsp, ...

  8. HTML单页营销宣传专题页源码

    简介: HTML单页营销宣传专题页源码是一款大气单页企业网站源码下载. 下载地址: http://www.bytepan.com/1iJpMBpts0K

  9. 业务展示类网站高保真原型模板库、企业品牌官网、公司业务介绍、产品展示及营销、首页模板、内页模板、单页模板、整站模板、导航、轮播、横幅、列表、客户、案例、页脚、动态面板、母版、页面事件、窗口函数

    本作品是一套专为业务展示类网站而推出的原型模板库,适用于制作企业品牌官网.公司业务介绍.产品展示及营销等各类网站.作品中包含了符合目前主流展示类网站设计风格的丰富模板及素材,并以UI设计稿级别的高保真 ...

最新文章

  1. VSCode 安装 Go 插件、gopls 是个什么东东
  2. python 基础_列表的其他操作 4
  3. loader调用过程
  4. MINA与JMX集成(翻译)
  5. 读书笔记《集体智慧编程》Chapter 5 : Optimization
  6. 2011年CDMA终端谁将给力?
  7. log4j2 配置详解及使用范例
  8. java编程思想第四版第十一章总结
  9. windows11 - 快速实现局域网内传文件
  10. 总结:抓包命令之linux抓包命令
  11. python -- 计算 平方、乘方、平方根_Python中math模块进行数学运算的示例
  12. PHP 梯形图,PLC梯形图程序设计
  13. 【干货】数据集网站汇总!
  14. hioki电阻测试仪3540软件,微电阻计/电阻测试仪/HIOKI 3540/HIOKI 3560/日置3540/日置3560...
  15. A. Equalize Prices Again
  16. 基于JavaWeb实现的城市公交查询系统
  17. [机缘参悟-43]:鬼谷子-第六忤合篇 - 合则聚,不合则散,顺势而为
  18. xlinx pcie xvc
  19. Java中关于length和length()的问题小结
  20. 人工智能并非万能,智慧停车怕难解决城市停车难题?

热门文章

  1. 记录一下对接腾讯云IM的部分接口(群聊、单聊)
  2. golang实现link的过程
  3. Grand Tour 属于欧洲贵族的浪漫成年礼
  4. Git和Github本地上传下载及拉取他人代码
  5. 计算机组成原理中J1J3是什么,计算机组成原理实验指导书.doc
  6. 我的世界java雪村种子_我的世界:矿洞和村庄的种子已经过时了,这个冰雪世界了解下?...
  7. STM32 单片机 LoRa 物联网应用解决方案
  8. Android Studio DDMS
  9. 记kali系统中下载百度网盘中文件的方法(一) BND
  10. 计算机汽油累计调价公式,2018年油价调整明细_2018年油价调整时间表及历史调价幅度汇总...