1 .在每一次router的时候查看history的变化情况,验证发现,既有hash的变化,而且也可以使用history的api操作,而且也探测到了相关的变化。
2 .
hash实现
1 .检测a标签的hash实现--<a href="#1">1</a>
2 .明明只定义来了一个类,怎么还会有类似的栈的结构出现。查看一波数据结构的实现。好像是个链式结构,这是第二种思路
history实现
2 .
关键api
1 .this.$router访问当前的router
2 .在进行hover事件表现层的时候,尽量不要使用border事件,这样会重新进行布局,发生页面抖动。就是表现层可以发生替换,最好不要出现从无到有的东西
3 .
history实现
1 .window.history属性指向History对象,他表示当前窗口的浏览历史。
2 .由于安全原因,浏览器不允许脚本读取到这些地址,但是允许在地址之间导航。
3 .浏览器工具栏的“前进”和“后退”按钮,其实就是对history对象进行操作。
4 .移动到之前访问过的页面,通常是从浏览器缓存之中加载的,而不是重新要求服务器发送新的网页。而且直接输入地址的时候也是这样,不会触发页面更新,那么也不会发送http请求。
5 .导致的问题:如果直接输入url的话,后端没有对相应的url做处理,那么会得到404,但是hash路由可以直接输入定位到某个视图。
属性
1 .length:当前窗口访问过的网址数量
2 .state:history堆栈最上层的状态值
方法
1 .back()回到上一个网址
2 .forward()移动到下一个网址
3 .go(n):正数是往前走,负数是往后走
4 .pushState({4.1},'4.2','index.html') :用于popstate事件,该事件触发的时候,该对象会传入回调函数。浏览器会将这个对象序列化之后保留在本地,重新载入这个页面的时候,可以拿到这个对象,如果不需要这个对象,可以填null。4.2:页面的标题,所有浏览器都会忽略这个参数,所以这里可以填空字符串
5 .pushState不会触发页面刷新,只是会导致history对象发生变化,地址栏会有变化
6 .pushState是不能插入跨域网址的。
7 .replaceState():用该修改当前history对象的当前记录。
事件
1 .popstate事件:每当一个文档的浏览历史出现变化的时候,就会触发这个事件
2 .调用pushState()或者replaceState()方法都不会触发该事件,只有用户点击浏览器器按钮或者前进按钮,或者使用back,go,forward方法才会触发
3 .这个事件只针对同一个文档,如果浏览器历史的切换,导致加载不同的文档,这个事件也不会触发。
4 .window.addEventListener('popstate',(event)=>{conso.log(event)}):这个用法就相当于检测onhashchange那个的意思了。
this.$router
1 .VueRouter势力,导航到不同的URL,就需要这个
this.$route
2 .this.route
1 .当前router跳转对象里面可以获取name,path,query,params