[Vue]路由及路由的基本使用

简介: [Vue]路由及路由的基本使用

前言

系列文章目录:

[Vue]目录

老师的课件笔记,不含视频 https://www.aliyundrive.com/s/B8sDe5u56BU

笔记在线版: https://note.youdao.com/s/5vP46EPC

视频:尚硅谷Vue2.0+Vue3.0全套教程丨vuejs从入门到精通


1. 相关概念

1.1 SPA

SPA 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组件的展示与切换都在这唯一的一个页面内完成。

此时,不同组件之间的切换需要通过前端路由来实现。

  1. 单页 Web 应用(single page web application,SPA)。
  2. 整个应用只有一个完整的页面。
  3. 点击页面中的导航链接不会刷新页面,只会做页面的局部更新。
  4. 数据需要通过 ajax 请求获取。

在 SPA 项目中,不同功能之间的切换,要依赖于前端路由来完成。

1.2 vue-router

1.2.1 vue-router 的概念

vue-router 是 vue 的一个插件库,是 vue.js 官方给出的路由解决方案,专门用来实现 SPA 应用。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。

1.2.2 vue-router 的版本

vue-router 目前有 3.x 的版本和 4.x 的版本。

其中:

vue-router 3.x 结合 vue2 进行使用,vue-router 3.x 的官方文档地址

vue-router 4.x 结合 vue3 进行使用,vue-router 4.x 的官方文档地址

1.3 路由

1.3.1 路由的概念

一个路由就是一组映射关系(key - value),key 为路径, value 可能是 function 或 component。

一个路由 key 对应的 value 是 function 还是 component 取决于路由的类别。

1.3.2 路由的分类

路由分为前端路由和后端路由。

  1. 后端路由:
  1. 理解:后端路由指的是,请求方式、请求地址与 function 处理函数之间的对应关系。value 是 function, 用于处理客户端提交的请求。
  2. 工作过程:服务器接收到一个请求时, 根据请求路径找到匹配的函数
    来处理请求, 返回响应数据。
  1. 前端路由:
  1. 理解:前端路由指的是,路径 与 component 组件之间的对应关系。value 是 component,用于展示页面内容。
  2. 工作过程:当浏览器的路径改变时, 对应的组件就会显示。
    ① 用户点击了页面上的路由链接
    ② 导致了 URL 地址栏中的值发生了变化
    ③ 前端路由监听了到地址的变化
    ④ 前端路由把当前地址对应的组件渲染都浏览器中

2. 路由的基本使用

2.1 案例实现效果

2.2 案例准备

2.2.1 静态页面

<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Vue App</title>
  <link rel="stylesheet" href="./css/bootstrap.css">
</head>
<body>
  <div>
    <div class="row">
      <div class="col-xs-offset-2 col-xs-8">
        <div class="page-header"><h2>Vue Router Demo</h2></div>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-2 col-xs-offset-2">
        <div class="list-group">
          <a class="list-group-item active" href="./about.html">About</a>
          <a class="list-group-item" href="./home.html">Home</a>
        </div>
      </div>
      <div class="col-xs-6">
        <div class="panel">
          <div class="panel-body">
            <h2>我是About的内容</h2>
          </div>
        </div>
      </div>
    </div>
  </div>
</body>
</html>

2.2.2 文件目录结构

2.2.3 index.js中引入bootstrap

<!-- 引入第三方css样式 bootstrap -->
    <link rel="stylesheet" href="<%= BASE_URL %>css/bootstrap.css">

2.2.4 组件的拆分

main.js

import Vue from 'vue'
import App from './App.vue'
//关闭vue的生产提示
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
}).$mount('#app')

App.vue

<template>
  <div>
    <!-- 使用子组件 -->
    <div class="row">
      <div class="col-xs-offset-2 col-xs-8">
        <div class="page-header">
          <h2>Vue Router Demo</h2>
        </div>
      </div>
    </div>
    <div class="row">
      <div class="col-xs-2 col-xs-offset-2">
        <div class="list-group">
          <a class="list-group-item active" href="./about.html">About</a>
          <a class="list-group-item" href="./home.html">Home</a>
        </div>
      </div>
      <div class="col-xs-6">
        <div class="panel">
          <div class="panel-body">
            <h2>点击导航后切换内容区</h2>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
// 导入子组件
export default {
  name: 'App',
  // 注册子组件
  components: {
  }
}
</script>

Home.vue

<template>
  <div>
    <h2>Home组件</h2>
  </div>
</template>
<script>
export default {
  name: 'Home'
}
</script>
<style>
</style>

About.vue

<template>
  <div>
    <h2>About组件</h2>
  </div>
</template>
<script>
export default {
  name: 'About'
}
</script>
<style>
</style>

2.3 安装 vue-router

注意:

vue-router 3.x 结合 vue2 进行使用,vue-router 3.x 的官方文档地址

vue-router 4.x 结合 vue3 进行使用,vue-router 4.x 的官方文档地址

这里vue的版本为2.x,所以安装vue-router的3.x版本

npm i vue-router@3

2.4 引入与使用 vue-router 插件

由于 vue-router 是 vue 中的一个插件,所以使用 vue-router 需要先引入和使用 vue-router。

// 引入 vue-router
import VueRouter from 'vue-router'
// 使用 vue-router 插件
Vue.use(VueRouter)

在引入和使用 vue-router 之后,实例化 vue 实例对象时可以传入一个配置项 router。

2.5 新建文件夹创建路由器

目录结构:

router/index.js

// 该文件专门用于创建整个应用的路由器
import VueRouter from 'vue-router'
//引入组件
import About from '../components/About'
import Home from '../components/Home'
//创建并暴露一个路由器
export default new VueRouter({
  // 路由,地址与组件的对应关系
  routes:[
    {
      path:'/about',
      component:About
    },
    {
      path:'/home',
      component:Home
    }
  ]
})

2.6 引入并配置路由器

main.js

import Vue from 'vue'
import App from './App.vue'
// 引入 vue-router
import VueRouter from 'vue-router'
// 引入路由器
import router from './router'
// 使用 vue-router 插件
Vue.use(VueRouter)
//关闭vue的生产提示
Vue.config.productionTip = false
new Vue({
  render: h => h(App),
  // 配置路由器
  router: router
}).$mount('#app')

2.7 实现导航区地址修改

实现导航区地址的修改,需要使用 vue-router 提供的标签 <router-link ></router-link>,跳转到的地址通过 router-link 标签上的 to 属性指定。

跳转到的路由地址需要与路由器中配置的一致

激活时的样式可以通过 active-class 属性指定

<div class="col-xs-2 col-xs-offset-2">
        <div class="list-group">
          <!-- 原始html中使用a标签实现页面的跳转 -->
          <!-- <a class="list-group-item active" href="./about.html">About</a> -->
          <!-- <a class="list-group-item" href="./home.html">Home</a> -->
          <!-- Vue中借助router-link标签实现路由的切换 -->
          <!-- 跳转到的路由地址需要与路由器中配置的一致 -->
          <!-- 通过 active-class 属性指定激活时的样式 -->
          <router-link class="list-group-item" active-class="active" to="/about">About</router-link>
          <router-link class="list-group-item" active-class="active" to="/home">Home</router-link>
        </div>
      </div>

2.8 当前路由对应的组件的呈现

指定当前路由对应组件呈现的位置使用 router-view 标签。

<div class="col-xs-6">
        <div class="panel">
          <div class="panel-body">
      <!-- <h2>点击导航后切换内容区</h2> -->
            <!-- 指定当前路由对应组件的呈现位置 -->
            <router-view></router-view>
          </div>
        </div>
      </div>

3. 几个注意点

  1. 路由组件通常存放在pages文件夹,一般组件通常存放在components文件夹。
  2. 通过切换,“隐藏”了的路由组件,默认是被销毁掉的,需要的时候再去挂载。
  3. 每个组件都有自己的$route属性,里面存储着自己的路由信息。
  4. 整个应用只有一个router,可以通过组件的$router属性获取到。

4. 总结 路由及路由的基本使用

4.1 路由

  1. 理解: 一个路由(route)就是一组映射关系(key - value),多个路由需要路由器(router)进行管理。
  2. 前端路由:key是路径,value是组件。

4.2 基本使用

  1. 安装vue-router,命令:npm i vue-router
  2. 应用插件:Vue.use(VueRouter)
  3. 编写router配置项:
//引入VueRouter
import VueRouter from 'vue-router'
//引入Luyou 组件
import About from '../components/About'
import Home from '../components/Home'
//创建router实例对象,去管理一组一组的路由规则
const router = new VueRouter({
  routes:[
    {
      path:'/about',
      component:About
    },
    {
      path:'/home',
      component:Home
    }
  ]
})
//暴露router
export default router
  1. 实现切换(active-class可配置高亮样式)
<router-link active-class="active" to="/about">About</router-link>
  1. 指定展示位置
<router-view></router-view>


相关文章
|
19天前
|
JavaScript
vue使用iconfont图标
vue使用iconfont图标
107 1
|
30天前
|
JavaScript 关系型数据库 MySQL
基于VUE的校园二手交易平台系统设计与实现毕业设计论文模板
基于Vue的校园二手交易平台是一款专为校园用户设计的在线交易系统,提供简洁高效、安全可靠的二手商品买卖环境。平台利用Vue框架的响应式数据绑定和组件化特性,实现用户友好的界面,方便商品浏览、发布与管理。该系统采用Node.js、MySQL及B/S架构,确保稳定性和多功能模块设计,涵盖管理员和用户功能模块,促进物品循环使用,降低开销,提升环保意识,助力绿色校园文化建设。
|
2月前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
55 1
vue学习第一章
|
2月前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
51 1
|
2月前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
64 18
|
2月前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
2月前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能
|
2月前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
44 1
|
2月前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。