设为首页 加入收藏

TOP

[Vue 牛刀小试]:第十二章 - 使用 Vue Router 实现 Vue 中的前端路由控制(一)
2019-09-17 18:48:19 】 浏览:41
Tags:Vue 牛刀小试 十二 使用 Router 实现 前端 路由 控制

 一、前言

  前端路由是什么?如果你之前从事的是后端的工作,或者虽然有接触前端,但是并没有使用到单页面应用的话,这个概念对你来说还是会很陌生的。那么,为什么会在单页面应用中存在这么一个概念,以及,前端路由与我们后端的路由有什么异同呢。本章,我们就来简单介绍下前端路由的概念,以及如何在 Vue 中使用 Vue Router 来实现我们的前端路由。

  学习系列目录地址:https://www.cnblogs.com/danvic712/p/9549100.html

  仓储地址:https://github.com/Lanesra712/VueTrial/blob/master/chapter02-bronze/router/sample.html

 二、干货合集

  在传统的多页面应用中,网站的每一个 URL 地址都是对应于服务器磁盘上的一个实际物理文件。例如,当我们访问 https://www.yousite.com/index.html 这个网址的时候,服务器会自动把我们的请求对应到当前站点路径下面的 index.html 文件,然后再给予响应,将这个文件返回给浏览器。当我们跳转到别的页面上时,毫无疑问则会再重复一遍上面的过程。

  但是在单页面应用中,整个项目中只会存在一个 html 文件,当用户切换页面时,只是通过对这个唯一的 html 文件进行动态重写,从而达到响应用户的请求。也就是说,从切换页面这个角度上说,应用只是在第一次打开时请求了服务器(非服务端渲染的单页应用)。

  因为访问的页面是并不真实存在的,所以如何正确的在一个 html 文件中展现出用户想要访问的信息就成为单页面应用需要考虑的问题,而对于这一路由问题的解决方案,为了与我们后端传统意义上的路由进行区别,就将此称为前端路由。

  1、前端路由的实现方式

  目前的前端路由的实现方式主要是通过 hash 路由匹配或者是采用 html5 中的 history api 这两种,也就是说,不管是 hash 路由还是使用 history 路由模式,其实都是基于浏览器自身的特性。

  hash 路由:hash 这个概念,可能听起来有些陌生,不过,其实我们在之前的前端开发中,其实是有所接触的。例如,在某些情况下,我们需要定位页面上的某些位置,就像下面的例子中展现的那样,我想要通过点击不同的按钮就跳转到指定的位置,这里我们使用的锚点定位其实就是 hash。

<div id="content">
  <div class="btn-container">
    <a class="btn" href="#image1">图片1</a>
    <a class="btn" href="#image2">图片2</a>
  </div>
  <img src="./xxx/xxx.jpg" id="image1">
  <img src="./xxx/xxx.jpg" id="image2">
</div>

  hash 路由的本质是浏览器 location 对象中的 hash 属性,它会记录链接地址中 '#' 后面的内容(e.g.:#part1)。因此,我们可以通过监听 window.onhashchange 事件获取到跳转前后访问的地址,从而实现地址切换的目的。 

  history 路由:在之前的 html 版本中,我们可以通过 history.back(), history.forward()和 history.go() 方法来完成在用户历史记录中向后和向前的跳转。而 history 路由则是使用了 html5 中新增的 pushState 事件和 replaceState() 事件。

   通过这两个新增的 API,就可以实现无刷新的更改地址栏链接,配合 AJAX 就可以做到整个页面的无刷新跳转,具体实现的原理大家可以看看这篇文章 =》https://www.renfei.org/blog/html5-introduction-3-history-api.html 

  在 Vue 中,Vue Router 是官方提供的路由管理器。它和 Vue.js 的核心深度集成,因此,不管是采用 hash 的方式还是使用 history api 实现我们的前端路由都有很好的支持,所以这里我们采用 Vue Router 这一组件来实现我们的前端路由。

  2、路由实现

  首先我们需要将 Vue Router 添加引用到我们的项目中,这里我还是采用直接引用 js 文件的方式为我们的示例代码添加前端路由支持。

  在 Vue 中使用 Vue Router 构建单页面应用,我们只需要将组件 (components) 映射到定义的路由 (routes) 规则中,然后告诉 Vue Router 在哪里渲染它们,并将这个路由配置挂载到 Vue 实例节点上即可。

  在 Vue Router 中,我们使用 router-link 标签来渲染链接,当然,默认生成的是 a 标签,如果你想要将路由信息生成别的 html 标签,则可以使用 tag 属性指明需要生成的标签类型。

<!-- 默认渲染成 a 标签 -->
<router-link to="/home">主页</router-link>

<!-- 渲染成 button 标签 -->
<router-link to="/home" tag="button">主页</router-link>

  可以看到,当我们指定 tag 属性为 button 后,页面渲染后的的标签就变成了 button 按钮。同样的,它还是会监听点击,触发导航。

  同时,从上图可以看出,当前的链接地址为 #/home,也就是说,通过 router-link 生成的标签,当页面地址与对应的路由规则匹配成功后,将自动设置 class 属性值为 .router-link-active。当然,我们也可以通过指定 active-class 属性或者在构造 VueRouter 对象时使用 linkActiveClass 来自定义链接激活时使用的 CSS 类名。

<!-- 使用属性来设定自定义激活类名 -->
<router-link to="/home" active-class="aaaa">主页</router-link>

<!-- 在构造对象时设定全局默认类名 -->
const router = new VueRouter({
    routes: [],
    linkActiveClass: 'aaaaa'
})

  当路由表构建完成后,对于指向路由表中的链接,需要在页面上找一个地方去显示已经渲染完成后的组件,这时,我们就需要使用 router-view 标签去告诉程序,我们需要将渲染后的组件显示在当前位置。

  在下面的示例代码中,模拟了 Vue 中路由的使用,当访问 #/home 时会进行加载 home 组件,而当链接跳转到 #/ac

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇采用localStorage做定时缓存 下一篇【开源我写的富文本】打造全网最..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目