网站首页 > 技术文章 正文
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: 'http://xxxx#web',
// newUrl: 'http://xxxx#webxiu',
// }
}
打印对象里面包含两个字段,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,例如 http://xxx/webxiu。
不过使用 history 模式时也需要注意,还需要后台配置支持。因为我们的应用是个单页客户端应用,如果后台没有正确的配置,当用户在浏览器直接访问 http://xxx/webxiu 就会返回 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 }
]
})
猜你喜欢
- 2024-11-25 浅谈SPA单页面应用原理
- 2024-11-25 一起学Vue:路由(vue-router)
- 2024-11-25 vue:vue-router相关
- 2024-11-25 「Burpsuite练兵场」CSRF(二)
- 2024-11-25 一文让你彻底搞懂 vue-Router
- 2024-11-25 Html5监听返回事件
- 2024-11-25 具名插槽使用出现空白
- 2024-11-25 手把手教你快速升级将React Router v5 路由器更新到v6
- 2024-11-25 深度:从零编写一个微前端框架
- 2024-11-25 路由的两种模式:hash模式和 history模式
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-