路由的概念
路由的本质就是一种对应关系,比如说我们在url
地址中输入我们要访问的url
地址之后,浏览器要去请求这个url
地址对应的资源。
那么url
地址和真实的资源之间就有一种对应的关系,就是路由。
路由分为前端路由和后端路由
- 后端路由是由服务器端进行实现,并完成资源的分发
- 前端路由是依靠hash值(锚链接)的变化进行实现
后端路由性能相对前端路由来说较低,所以,接下来主要讲解的是前端路由。
前端路由的基本概念
- 根据不同的事件来显示不同的页面内容,即事件与事件处理函数之间的对应关系
- 前端路由主要做的事情就是监听事件并分发执行事件处理函数
前端路由的初体验
前端路由是基于hash值的变化进行实现的(比如点击页面中的菜单或者按钮改变URL的hash值,根据hash值的变化来控制组件的切换)。
核心实现依靠一个事件,即监听hash值变化的事件
window.addEventListener('hashchange', () => {
//location.hash可以获取到最新的hash值
console.log(location.hash);
});
前端路由实现tab栏切换:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>前端路由实现tab栏切换</title>
</head>
<body>
<!-- 被 vue 实例控制的 div 区域 -->
<div id="app">
<!-- 切换组件的超链接 -->
<a href="#/home">首页</a>
<a href="#/news">新闻</a>
<a href="#/poem">古诗</a>
<a href="#/mine">我的</a>
<!-- 根据 :is 属性指定的组件名称,把对应的组件渲染到 component 标签所在的位置 -->
<!-- 可以把 component 标签当做是【组件的占位符】 -->
<component :is="comName"></component>
</div>
<script src="lib/vue_2.5.22.js"></script>
<script>
// #region 定义需要被切换的 4 个组件
// 首页组件
const home = {
template: '<h1>首页</h1>'
}
// 新闻组件
const news = {
template: '<h1>新闻</h1>'
}
// 古诗组件
const poem = {
template: '<h1>古诗</h1>'
}
// 我的组件
const mine = {
template: '<h1>我的</h1>'
}
// #region vue 实例对象
var vm = new Vue({
el: '#app',
data() {
return {
comName: 'home'
}
},
// 注册私有组件
components: {
home,
news,
poem,
mine
}
});
// #endregion
// 监听 window 的 hashchange 事件,根据获取到的最新的 hash 值,切换要显示的组件的名称
window.addEventListener('hashchange', () => {
// 通过 location.hash 获取到最新的 hash 值
console.log(location.hash);
// 将 # 截取掉
switch (location.hash.slice(1