我之前写了一半了,居然又没见了就离谱,从头开始。
vue-router是实现了前端路由,也就是url和ui之间的映射关系,当url改变时会引起ui更新,但无需刷新页面。那么如何实现前端路由呢,也就是如何解决这两个问题:
如何改变url但是页面不进行刷新
如何知道url变化了
然后就引出hash和history两种实现方式解决上面两个问题。
hash是url中#后面那一部分,改变url中的hash部分不会引起页面刷新,通过监听hashchange可以知道url的变化,改变hashurl的方式有如下几种:
通过浏览器前进后退改变url
通过a标签改变url
通过window.location改变url
然后监听hash的变化是hashchange
那么我们来简单的实现一下hash去改变url并且直接更新ui。
然后我们可以发现,当url改变的时候,ui界面确实发生了更新,但是整个界面并没有重新渲染。冰狗,完美完成任务。
history改变url的方法有如下两种:
pushstate,改变url后可以记录之前到过的url
replacestate,不会记录之前到过的url
history监听url改变的方法popstate事件,它的特点如下:
通过浏览器前进后退改变url时会触发popstate事件
通过pushstate/replacestate或a标签改变url不会触发popstate事件
可以通过拦截pushstate和replacestate的调用和a标签的点击事件来监听url的改变
通过js调用history的back,go,forward方法可以触发该事件
既然懂了,那就让我们来完美的实验一下如何用history完成前端路由:
(ps:id选择器可以直接获取,然后是拿到了window上面
自己做一个vue的插件,还是很特别的,首先我们知道使用vue-router的话我们是如下这样简单使用的:
因为使用到new去new一个vuerouter,所以可以把它当作一个类,其次用到了vue.use(),所以必须要有install方法,那我们来写一个简单的:
欧克,写完了,鸣金收兵。hhh,开玩笑的。
然后我们知道vue-router有许多的内置方法,如push,go,replace等等。这些等之后整理好了再来看。