前言:
现在兄弟们对“html5history”大致比较注意,我们都需要了解一些“html5history”的相关文章。那么小编也在网络上收集了一些对于“html5history””的相关资讯,希望朋友们能喜欢,大家快快来学习一下吧!Vue Router 是Vue官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。vue-router 默认 hash 模式,还有一种是 history 模式。
const router = new VueRouter({ mode: 'history', // 这里可以配置是那种模式 routes: [...]})hash模式
hash 模式的工作原理是 hashchange 事件,可以在window监听 hash 的变化。我们在url后面随便添加一个#xxxx就可以触发这个事件。
比如:
window.onhashchange = function(event){ console.log(event); // { // ... // oldUrl: ';, // newUrl: ';, // }}
打印对象里面包含两个字段,oldUrl 和 newUrl,这样我们就能根据对应的hash值,做出相应操作。
尽管改变hash,浏览器本身是没有任何请求服务器动作的,但是页面状态和url已经关联起来了,这就是所谓的前端路由,单页应用的标配。
history模式
HTML5新增的API
1、history.pushState(data, title [, url]):向历史记录堆栈顶部添加一条记录; data会在onpopstate事件触发时作为参数传递过去;title为页面标题,当前所有浏览器都会 忽略此参数;url为页面地址,可选,缺省为当前页地址;
2、history.replaceState(data, title [, url]) :更改当前的历史记录,参数同上;
3、history.state:用于存储以上方法的data数据,不同浏览器的读写权限不一样;
4、window.onpopstate:响应pushState或replaceState的调用;有了这几个新的API,针对支持的浏览器,我们可以构建用户体验更好的应用了。就像刚提到的Facebook相册,虽然是AJAX的方式,但用户可以直接复 制页面地址分享给好友,
如果不想要很丑的 hash,我们可以用路由的 history 模式,这种模式充分利用 history.pushState API 来完成 URL 跳转而无须重新加载页面。
当你使用 history 模式时,URL 就像正常的 url,例如 。
不过使用 history 模式时也需要注意,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 就会返回 404,这就是非常不好的。
所以呢,我们需要在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
比如:
nginx(添加到vhosts.conf)
location / { try_files $uri $uri/ /index.html;}Apache
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L]</IfModule>
如果我们的服务器完成了上面的配置,这时服务器就不会返回404错误页面了,因为对于所有路径都会返回 index.html 文件。为了避免这种情况,你应该在 Vue 应用里面覆盖所有的路由情况,然后在给出一个 404 页面。
const router = new VueRouter({ mode: 'history', routes: [ { path: '*', component: NotFoundComponent } ]})
标签: #html5history