小程序单页面应用特征是什么

  介绍

这篇文章主要介绍了小程序单页面应用特征是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

单页面应用特征

"假设:“在一个web页面中,有1个按钮,点击可跳转到站内其他页面。

“多页面应用:“点击按钮,会从新加载一个html资源,刷新整个页面;

“单页面应用:“点击按钮,没有新的html请求,只发生局部刷新,能营造出一种接近原生的体验,如丝般顺滑。

水疗单页面应用为什么可以几乎无刷新呢?因为它的SP -单页。在第一次进入应用时,即返回了唯一的html页面和它的公共静态资源,后续的所谓“跳”转,都不再从服务端拿html文件,只是DOM的替换操作,是模(jia)拟(壮族)的。

那么js又是怎么捕捉到组件切换的时机,并且无刷新变更浏览器url呢?靠哈希和HTML5History。

哈希路由

<强>特征

<李>

类似www.xiaoming.html酒吧就是哈希路由,当#后面的哈希值发生变化时,不会向服务器请求数据,可以通过hashchange事件来监听到url的变化,从而进行DOM操作来模拟页面跳转

<李>

不需要服务端配合

<李>

对SEO不友好

原理

小程序单页面应用特征是什么

哈希

<强> HTML5History路由

<强>特征

<李>

历史模式是HTML5新推出的功能,比之哈希路由的方式直观,长成类似这个样子www.xiaoming.html酒吧,模拟页面跳转是通过历史。pushState(国家、标题、url)来更新浏览器路由,路由变化时监听popstate事件来操作DOM

<李>

需要后端配合,进行重定向

<李>

对SEO相对友好

<李>


<强>原理

小程序单页面应用特征是什么

<强> HTML5History

vue-router源码解读

以Vue的路由vue-router为例,我们一起来撸一把它的源码。

提示:因为,本篇的重点在于讲解单页面路由的两种模式,所以,下面只列举了一些关键代码,主要讲解:

<李>

注册插件

<李>

VueRouter的构造函数,区分路由模式

<李>

全局注册组件

<李>

散列/HTML5History模式的推动和监听方法

<李>

transitionTo方法

<强>注册插件

首先,作为一个插件,要有暴露一个安装方法的自觉,给Vue爸爸去使用。

源码的安装。js文件中,定义了注册安装插件的方法安装,给每个组件的钩子函数混入方法,并在beforeCreate钩子执行时初始化路由:

Vue.mixin ({   ,beforeCreate  (), {   ,if  (isDef(这一点。options.router美元)),{   this._routerRoot =,这   this._router =,这。options.router美元   ,this._router.init(这)   ,Vue.util.defineReactive(这,& # 39;_route& # 39;,, this._router.history.current)   ,}else  {   ,this._routerRoot =,(这一点。parent 美元;,,,这个。parent._routerRoot美元),| |,   ,}   ,registerInstance (,,)   },   ,//全文中以…来表示省略的方法   ,……   });

<强>区分模式

然后,我们从索引。js找到整个插件的基类VueRouter,不难看出,它是在构造函数中,根据不同模式采用不同路由实例的。

…   import {安装},得到& # 39;。/安装# 39;;   import  {HashHistory},得到& # 39;。/历史/散列# 39;;   import  {HTML5History},得到& # 39;。/历史/html5 # 39;;   …   export  default  class  VueRouter  {   ,static 安装:(),=祝辞,无效;   ,constructor (选项:,RouterOptions =, {}), {   ,if  (this.fallback), {=,mode  & # 39;散列# 39;   ,}   ,if  (! inBrowser), {=,mode  & # 39;抽象# 39;   ,}=,this.mode 模式   ,,   ,switch (模式),{   ,case  & # 39;历史# 39;:=,,this.history  new  HTML5History(这个,,options.base)   ,打破   ,case  & # 39;散列# 39;:=,,this.history  new  HashHistory (options.base,这一点,还以为;this.fallback)   ,打破   ,case  & # 39;抽象# 39;:=,,this.history  new  AbstractHistory(这个,,options.base)   ,打破   ,默认值:   ,if  (process.env.NODE_ENV  !==, & # 39;生产# 39;),{   ,断言(假,,”模式:invalid  ${模式}')   ,}   ,}   ,}   }

小程序单页面应用特征是什么