Vue笔记

vue项目中URL的#问题

2018-07-27  本文已影响499人  许小花花

今天闲着没事在看项目时,发现页面URL总是带有个#,也就是一个hash。查看的一些资料,在router里面加多一个属性以后就解决了问题,加的语句如下:

const router = new VueRouter({
  mode: 'history', //这一句
  routes: [...]
})

下面来看看背后的原理
这种模式充分利用history.pushState API 来完成 URL 跳转而无须重新加载页面。
对于vue开发的单页面应用,我们在切换不同的页面的时候,可以发现html永远只有一个,这也是称之为单页面的原因,而 vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。因为对于正常的页面来说,更换 url 一定是会导致页面的更换的, 而只有更换 url 中的查询字符串和hash值的时候才不会重新加载页面。 这里也就是这个道理。
其实意思就是说,我们都知道,改变页面的hash是不会导致页面更新的,并且 vue 是单页面,也就是说它只有一个 html 文件,但是又需要不同的 URL 来帮助用户区分不同的呈现内容。而我们一旦改变了URL,页面是一定会刷新的,所以只能将所要呈现的不同URL的不同的部分,作为hash,这样就不会导致页面刷新了。所以有了那个丑丑的#

注意

但是,这样做会导致一些问题。主要是因为我们把hash去掉了,这样当我们在地址栏输入URL的时候,就是真的去请求那个路径下了网页了,当然那是不存在的,这时就会导致404。
所以需要后台做出相应的改变,就是当所请求的页面不存在时返回我们的index.html,也就是我们总页面。
(其实这里有点不太理解,意思是我们在页面内点击跳转组件导致的URL改变没有关系,而手动输入URL时会导致404吗?如果有胖友明白的还望指点)

上一篇下一篇

猜你喜欢

热点阅读