vue路由或前端路由实现原理

前端路由实现原理主要通过以下两种技术实现的

第一种:利用H5的history API实现

        主要通过history.pushState 和 history.replaceState来实现,不同之处在于, pushState会增加一条新的历史记录,而replaceState则会替换当前的历史记录[发布项目时, 需要配置下apache

第二种:利用url的hash实现

        我们经常在 url 中看到 #,这个 # 有两种情况,一个是我们所谓的锚点,路由里的 # 不叫锚点,我们称之为 hash,我们说的就是hash,主要利用监听哈希值的变化来触发事件 —— hashchange 事件来做页面局部更新

总结:hash 方案兼容性好,而H5的history主要针对高级浏览器。 以下为具体的API的区别:

this.$router.push(location, onComplete?, onAbort?) 这个⽅法会向 history 栈添加⼀个新的记录,所 以,当⽤户点击浏览器后退按钮时,则回到之前的 URL。并且点击 等同于调⽤ router.push(...)。

this.$router.replace(location, onComplete?, onAbort?) 这个⽅法不会向 history 添加新记录,⽽是跟它 的⽅法名⼀样 —— 替换掉当前的 history 记录,所以,当⽤ 户点击浏览器后退按钮时,并不会回到之前的 URL。

this.$router.go(n) 这个⽅法的参数是⼀个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)。

以上也可能会形成一个新的面试题:replace和push的区别 可以说,以前在一个项目里面配置了一个

二级路由,里面有tab切换部分(详情,评价,说明),因为返回 上一页的时候,不能在这几个选项卡之间来

回切换.所以我使用了this.$router.replace方法,不计入 history记录中,所以不会出现,反复切换的bug

上一篇:第二天:正则表达式


下一篇:ctfshow_文件包含