#号的含义
#号代表网页中的一个位置。右边的字符表示该位置上的标识符
http://www.example.com/index.html#print
这个URL代表的是这个www.example.com域名的这个index.html页面下的print位置。浏览器读取这个URL后,会自动的将print所在的位置滚动到可视区域内。
跳转到页面的定值位置可以使用a标签的name属性(锚点),或者使用id属性
其实也就是#后边的字符不会被发送给服务端
改变#后边的内容也就不会重新发送请求,会发生位置的改变(跳到当前页面的某个位置)
改变#会改变浏览器的历史,会产生一条新的历史记录
window.location.hash读取#的值
onhashchange事件,是html5新增的事件,当#值改变时候,会触发该事件
HashHistory:更新视图但不重新请求页面
实现:
路由变化时候出发updateRoute函数,就是执行里面的cb函数,cb函数是从History.listen(cb)时候传入的,这个对路由的监听函数是对app实例的遍历,给每一项添加_route属性,但是我们知道vue是渐进式的,vue本身不具有关于路由的属性,所以路由的引入是使用的插件,也就是执行路由的install,install就是给vue添加一个mixin混入对象,从而给vue添加路由属性
监听路由的过程
我们在地址栏输入一个url后,通过setuplisteners(这个是 给路由添加hashchange事件的)调用replaceHash