您好,欢迎来到宝玛科技网。
搜索
您的当前位置:首页vue-router实现原理

vue-router实现原理

来源:宝玛科技网

1、单页面应用 

vue实现了单页面应用,什么是单页面应用呢,就是在网页上不刷新不跳转页面,你在网页上看到的所有页面跳转都是靠页面重新渲染完成的。就好比,你用手机看电子书,每看完一页,不是像实体书那样翻页,而是点击手机的下一页,手机在屏幕上再给渲染出下一页的内容。

vue没有真正意义上的页面跳转,所以页面间的跳转要靠路由完成,当url变化时,路由根据url的变化调用渲染页面的方法,渲染新的界面。

2、vue-router原理

根据上述所讲,一个路由插件至少需要满足的两个条件:(1)url发生改变,不会向后台发送请求;(2)url改变后,要重新渲染页面。

vue-router作为vue的路由插件,核心就是实现了上述两个功能,实现第(2)步比较容易,只要在路由跳转时调用vue的界面渲染方法即可,下面主要讲述第一步vue-router是怎么实现的。

vue-router实现url发生改变,不会向后台发送请求,其实它是利用了浏览器提供的接口:window.history以及window.location.hash。我们知道vue-router配置中有一个mode属性,它有两个选项:hash,histroy,这个属性决定了vue-router,调用浏览器的哪个接口实现路由功能。

var router = new vueRouter({
    mode: 'hash',//这里设置vue-router的模式
    routes: [
        {
            path: '/',
            component: index
        },
        {
            path: '/first',
            component: first
        }
    ]
})

(1)hash

 当mode属性使用”hash“时,你会发现在,你的vue在页面跳转时,url中会出现”#“

               

 

每次url改变时,都是”#“后的内容发生改变。vue-router此时调用了浏览器的window.location.hash接口,当你给window.location.hash赋不同的值时,只会改变url,而不会向后台发送请求。vue-router此时就是利用了window.location.hash的这个特点。

(2)history

当mode属性使用”history“时,页面跳转时url中会出现不会出现”#“,这时vue-router调用了window.history(以下简写成history)的replaceState或者pushState接口。

 

调用history.pushState接口,可以向历史栈中添加浏览历史数据,例如:调用 history.pushState({},'','c.html')(接口具体参数意义,请详见mdn:,在此不做说明),history存储数据如下

 

调用history.replaceState接口,则是替代栈顶的浏览器历史数据,例如:调用history.replaceState({},'','c.html'),则history的数据如下

 

无论是pushState接口,还是replaceState接口,都实现了改变url,而不向后台发送数据。vue-router的history模式,正是通过这种方式 ,实现了路由跳转。

 

 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务