Vue-Router 路由

113 阅读5分钟

学习笔记,侵权可删! --2021年3月22日16:37:26

Vue-Router 路由

一、什么是路由?

**路由( routing )**就是通过互联网的网络把信息从源地址传输到目的地址的活动。 --维基百科

路由器提供了两种机制:路由和转送。

  • 路由是决定数据包从来源目的地的路径。
  • 转送将输入端的数据转移到合适的输出端。

路由中有一个非常重要的概念叫路由表。

  • 路由表本质上就是一个映射表,决定了数据包的指向。

① 后端路由阶段:

  1. 后端渲染(服务器渲染):

    jsp:java server page

  2. 后端路由:

    后端处理 URL 和页面之间的映射关系.

  3. 后端路由的缺点:

  • 一种情况是整个页面的模块由后端人员来编写和维护的。
  • 另一种情况是前端开发人员如果要开发页面,需要通过 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:调用该方法后,才能进入下一个钩子.