一、前言
这里需要理解下我们现在多数开发的应用都是单页面应用,什么是单页面应用呢? 单页面应用简单理解就是只有一个html对应多个资源文件(js、css、img等等source)的web应用。
二、router-link实现原理
目前主流框架使用的有两种实现方式:
- window.history:html5提出了history.pushState(stateObj, title, url),此方法可以模拟浏览器前进后退,但是不会触发页面刷新,只是导致history对象发生变化,地址栏会有反应,而history.back()、history.forward()、history.go(n)、forward()会触发页面刷新。另外还有history.replaceState(stateObj, title, url)也不会触发页面刷新,和history.pushState(stateObj, title, url)的区别在于它是用来修改浏览历史中当前纪录。(另外提一嘴,history还有popstate事件,调用back、forward、go方法时才会触发)
- location.hash不会触发页面刷新:
- 在浏览器地址最后面增加或修改#hash
- 修改location.href或location.hash
- 锚点定位
- 浏览器前进后退(两个网页地址中的hash值不同)会导致hash的变化
监听事件:window.onhashchange
三、两者区别
a标签定义超链接,用于从一张页面链接到另一张页面,是页面跳转方式(from html to html)。
而router-link是单页面应用中不同路由组件间的跳转方式,是监听浏览器路由事件来完成dom的切换、隐藏、显示等页面效果,非BOM层的操作是不会刷新页面的。