前端路由简介以及vue-router实现原理
作者:muwoo
来源:
后端路由简介路由这个概念最先是后端出现的 。 在以前用模板引擎开发页面时 , 经常会看到这样
大致流程可以看成这样:
- 浏览器发出请求
- 服务器监听到80 端口(或443)有请求过来 , 并解析 url 路径
- 根据服务器的路由配置 , 返回相应信息(可以是 html 字串 , 也可以是 json 数据 , 图片等)
- 浏览器根据数据包的 Content-Type 来决定如何解析数据
前端路由
- hash 模式
类似于服务端路由 , 前端路由实现起来其实也很简单 , 就是匹配不同的 url 路径 , 进行解析 , 然后动态的渲染出区域 html 内容 。 但是这样存在一个问题 , 就是 url 每次变化的时候 , 都会造成页面的刷新 。 那解决问题的思路便是在改变 url 的情况下 , 保证页面的不刷新 。 在 2014 年之前 , 大家是通过 hash 来实现路由 , url hash 就是类似于:
#/login
这种#。 后面 hash 值的变化 , 并不会导致浏览器向服务器发出请求 , 浏览器不发出请求 , 也就不会刷新页面 。 另外每次 hash 值的变化 , 还会触发 hashchange 这个事件 , 通过这个事件我们就可以知道 hash 值发生了哪些变化 。 然后我们便可以监听 hashchange来实现更新页面部分内容的操作:unction matchAndUpdate () {// todo 匹配 hash 做 dom 更新操作}window.addEventListener('hashchange', matchAndUpdate)
Vue router 实现我们来看一下vue-router 是如何定义的:import VueRouter from 'vue-router'Vue.use(VueRouter)const router = new VueRouter({mode: 'history',routes: [...]})new Vue({router...})
可以看出来 vue-router 是通过Vue.use 的方法被注入进 Vue 实例中 , 在使用的时候我们需要全局用到 vue-router 的router-view 和 router-link 组件 , 以及 this.$router/$route 这样的实例对象 。 那么是如何实现这些操作的呢?下面我会分几个章节详细的带你进入 vue-router的世界 。造轮子 -- 动手实现一个数据驱动的 router经过上面的阐述 , 相信您已经对前端路由以及vue-router 有了一些大致的了解 。 那么这里我们为了贯彻无解肥 , 我们来手把手撸一个下面这样的数据驱动的 router:
new Router({id: 'router-view', // 容器视图mode: 'hash', // 模式routes: [{path: '/',name: 'home',component: 'Home',beforeEnter: (next) => {console.log('before enter home')next()},afterEnter: (next) => {console.log('enter home')next()},beforeLeave: (next) => {console.log('start leave home')next()}},{path: '/bar',name: 'bar',component: 'Bar',beforeEnter: (next) => {console.log('before enter bar')next()},afterEnter: (next) => {console.log('enter bar')next()},beforeLeave: (next) => {console.log('start leave bar')next()}},{path: '/foo',name: 'foo',component: 'Foo'}]})
思路整理首先是数据驱动 , 所以我们可以通过一个 route 对象来表述当前路由状态 , 比如:current = {path: '/', // 路径query: {}, // queryparams: {}, // paramsname: '', // 路由名fullPath: '/', // 完整路径route: {} // 记录当前路由属性}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 路由器|路由器要定时按这个键,很多人不懂,难怪网速又慢又卡
- 4×4mimo/160MHz满血全开!小米路由器AX6000评测:599元Wi-Fi 6新王者
- 计算机专业大三学生,如果想主攻前端开发,该重视哪些内容
- 2021年买旗舰和路由认准160MHz:享受快一倍的WiFi 6网速
- 涉足水利行业,蒲公英4G工业路由器助力IOT智能互联
- 599元!小米路由器AX6000发布:6000兆无线 2500兆全速网口
- 普通大学计算机专业的本科生,该选择主攻前端还是Java
- 6000兆无线史上最强!小米路由器AX6000开箱图赏
- 小米发布高端路由器AX6000,首发支持WiFi6增强版和4K QAM技术
- 米家设备一键联网小米AX3600路由器固件更新