学习笔记,侵权可删! --2021年3月22日16:37:26
Vue-Router 路由
一、什么是路由?
**路由( routing )**就是通过互联网的网络把信息从源地址传输到目的地址的活动。 --维基百科
路由器提供了两种机制:路由和转送。
- 路由是决定数据包从来源到目的地的路径。
- 转送将输入端的数据转移到合适的输出端。
路由中有一个非常重要的概念叫路由表。
- 路由表本质上就是一个映射表,决定了数据包的指向。
① 后端路由阶段:
-
后端渲染(服务器渲染):
jsp:java server page
-
后端路由:
后端处理 URL 和页面之间的映射关系.
-
后端路由的缺点:
- 一种情况是整个页面的模块由后端人员来编写和维护的。
- 另一种情况是前端开发人员如果要开发页面,需要通过 PHP 和 Java 等语言来编写页面代码。
- 通常情况下 HTML 代码和数据以及对应的逻辑会混在一起,编写和维护都是非常糟糕的事情。
② 前后端分离阶段:
后端只负责提供数据,不负责任何阶段的内容。
优点:
- 前后端责任的清晰,后端专注于数据上,前端专注于交互和可视化上。
- 当移动端(iOS/Android)出现后,后端不需要进行任何处理,依然使用之前的一套 API 即可。
目前很多的网站依然采用这种模式开发。
前端渲染:
浏览器中显示的网页中的大部分内容,都是由前端写的 js 代码在浏览器中执行,最终渲染出来的网页。
③ 单页面富应用阶段(SPA):
SPA:单页富应用
整个网页只有一个 html 页面
前端路由:
url:xxx/home
- SPA 最主要的特点就是在前后端分离的基础上加了一层前端路由.
- 就是前端来维护一套路由规则.
前端路由的核心是什么呢?
- 改变 URL,但是页面不进行整体的刷新。
- 如何实现呢?
url 的 hash 和 HTML5 的 history:
URL 的 hash:
- URL 的 hash 也就是锚点(#),本质上是改变 window.location 的 href 属性.
- 可以通过直接赋值 location.hash 来改变 href,但是页面不发生刷新。
- 例如:location.hash = '/foo' -> '/foo'
HTML5 的 history模式:pushState
-
history.pushState({ data }, { title }, { url })
-
例如:history.pushState({ }, { }, 'home') -> /home
-
类似栈的结构(先进后出 后进先出)
-
history.back( ) 返回上一个
-
浏览器左上角可以点返回按钮
HTML5 的 history模式:replaceState:
- history.replaceState({ data },{ title }, { url })
- 浏览器左上角不能点返回按钮
HTML5 的 history模式:go
- history.back( ) 等价于 history.go(-1)
- history.forward( ) 等价于 history.go(1)
- history.go(2) 往前跳2
- history.go(-2) 往后跳2
二、安装和使用vue-router
学习了 webpack 后,后续开发中主要是通过工程化的方式进行开发。(后面,直接使用 npm 安装路由即可)
步骤一:安装vue-router
- npm install vue-router --save
步骤二:在模块化工程中使用它(因为是一个插件,所有可以通过 Vue.use( ) 来安装路由功能)
- ①:导入路由对象,并且调用 Vue.use(VueRouter)
- ②:创建路由实例,并且传入路由映射配置
- ③:在 Vue 实例中挂载创建的路由实例
使用 vue-router的步骤:
- ①:创建路由组件
- ②:配置路由映射:组件和路径的映射关系
- ③:使用路由:通过 和
三、认识路由的懒加载
官方给出的解释:
- 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。
- 把不同路由对应的组件分割成不同的代码块,当路由被访问的时候才加载对应组件,这样更加高效.( 路由的懒加载 )
懒加载的方式:
- 方式一:结合 Vue 的异步组件和 Webpack 的代码分析。
- 方式二:AMD 写法。
- 方式三:在 ES6 中,用更简单的写法来组织 Vue 异步组件和 Webpack 的代码分割。
- 方式三例子: const Home = ( ) => import('../components/Home.vue')
四、认识嵌套路由
嵌套路由是一个很常见的功能:
- 比如在 home 页面中,我们希望通过 /home/news 和 /home/message 访问一些内容.
- 一个路径映射一个组件,访问这两个路径也会分别渲染两个组件.
实现嵌套路由有两个步骤:
- 创建对应的子组件,并且在路由映射中配置对应的子路由.
- 在组件内部使用标签.
4.1 传递参数的方式
传递参数主要有两种类型:params 和 query
params 的类型:
- 配置路由格式:/router/:id
- 传递的方式:在 path 后面跟上对应的值
- 传递后形成的路径:/router/123, /router/wxf
query 的类型:
- 配置路由格式:/router, 也就是普通配置
- 传递的方式:对象中使用 query 的 key 作为传递方式
- 传递后形成的路径:/router?id=123, /router?id = wxf
五、为什么使用导航守卫?
什么是导航守卫?
- vue-router 提供的导航守卫主要用来监听路由的进入和离开的.
- vue-router 提供了 beforeEach 和 afterEach 的钩子函数,它们会在路由即将改变前和改变后触发.
导航钩子的三个参数解析:
- to:即将要进入的目标的路由对象.
- from:当前导航即将要离开的路由对象.
- next:调用该方法后,才能进入下一个钩子.