Vue学习笔记(三) 路由+axios

思维导图

文章目录

1.路由的概念与原理

1.1 什么是路由

  • 理解:一个路由(route)就是一组映射关系(key - value),key 为路径, value 可能是 function 或 component,多个路由需要路由器(router)进行管理。
  • 路由分为两大类:
    ① 后端路由:value 是 function, 用于处理客户端提交的请求
    ② 前端路由:value 是 component,用于展示页面内容。

1.1.1 前端路由

通俗易懂的概念:Hash 地址与组件之间的对应关系。Hash地址就是<a>标签的锚点链接
工作过程:当浏览器的路径改变时, 对应的组件就会显示。

1.1.2 后端路由

工作过程:服务器接收到一个请求时, 根据请求路径找到匹配的函数来处理请求, 返回响应数据。

后端路由指的是:请求方式、请求地址与 function 处理函数之间的对应关系。在 node.js 中,基于express 框架路由的基本用法如下:

const express = require('express');
const router = express.Router();
router.get('/userlist',function(req,res){
    /* 路由的处理函数*/});
router.post('/userlist',function(req,res){
    /* 路由的处理函数*/});
module.export = router;

1.2 SPA 与前端路由

  • SPA(single page web application) 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组件的展示与切换都在这唯一的一个页面内完成。点击页面中的导航链接不会刷新页面,只会做页面的局部更新,数据需要通过 ajax 请求获取。
  • 在 SPA 的项目中,不同功能之间的切换,要依赖于前端路由来完成!

1.3 前端路由的工作方式

① 用户点击了页面上的路由链接
② 导致了 URL 地址栏中的 Hash 值发生了变化
③ 前端路由监听了到 Hash 地址变化
④ 前端路由把当前 Hash 地址对应的组件渲染都浏览器中
在这里插入图片描述
结论:前端路由,指的是 Hash 地址与组件之间的对应关系!

1.4 实现简易的前端路由

步骤1:导入并注册 Home、Movie、About 三个组件
步骤2:通过 <component> 标签 is 属性,动态切换要显示的组件。
步骤3:在 App.vue 组件中,为 <a> 链接添加对应的 hash 值
步骤4:在 created 生命周期函数中,监听浏览器地址栏中 hash 地址的变化,动态切换要展示的组件的名称

<template>
  <div class="app-container">
    <h1>App 根组件</h1>
    <!-- 为a标签添加对应的hash值 -->
    <a href="#">首页</a>
    <a href="#">电影</a>
    <a href="#">关于</a>
    <!-- 2.1 通过 is 属性,指定要展示的组件的名称 -->
    <component :is="comName"></component>
    <hr />
  </div>
</template>

<script>
// 1.1 导入并注册 Home、Movie、About 三个组件
import Home from "@/components/Home.vue";
import Movie from "@/components/Movie.vue";
import About from "@/components/About.vue";

export default {
   
  name: "App",
  data() {
   
    return {
   
      // 2.2 要展示的组件名称,值必须为字符串
      comName: "Home",
    };
  },
  // 1.2 注册组件
  components: {
   
    Home,
    Movie,
    About,
  },
  created() {
   
    // 当前App组件一被创建,就立即监听window对象的onhashchange事件
    window.onhashchange = () => {
   
      // URL中#后面的部分改变时就会触发hashchange事件
      switch (
        location.hash // 通过location.hash 拿到#即后面的URL片段内容
      ) {
   
        case "#/home":
          this.comName = "Home";
          break;
        case "#/movie":
          this.comName = "Movie";
          break;
        case "#/about":
          this.comName = "About";
          break;
      }
    };
  },
};
</script>

2. vue-router 的基本使用

2.1 什么是 vue-router

  • ue-router 是 vue.js 官方给出的路由解决方案。它只能结合 vue 项目进行使用,能够轻松的管理 SPA 项目中组件的切换。
  • vue-router 的官方文档地址:https://router.vuejs.org/zh/

2.2 vue-router 安装和配置的步骤

① 安装 vue-router 包
② 创建路由模块
③ 导入并挂载路由模块
④ 声明路由链接和占位符

2.2.1 在项目中安装 vue-router

在 vue2 的项目中,安装 vue-router 的命令如下:

npm i vue-router@3.5.2 -S

注意:vue3中用vue-router 4x,vue2中用vue-router 3x

2.2.2 创建路由模块

在 src 源代码目录下,新建 router/index.js 路由模块,并初始化如下的代码:

// src/router/index.js 就是当前项目的路由模块
// 1. 导入Vue 和 VueRouter的包
import Vue from "vue";
import VueRouter from "vue-router";
// 2.调用 Vue.use()函数,把VueRouter安装为Vue项目的插件
// Vue.use()函数的作用,就是用来安装插件的
Vue.use(VueRouter);
// 3. 创建路由的实例对象
const router = new VueRouter();
// 4. 向外共享路由的实例对象
export default router;

2.2.3 导入并挂载路由模块

在 src/main.js 入口文件中,导入并挂载路由模块。示例代码如下:

import Vue from "vue";
import App from "./App.vue";
// 导入路由模块,目的是拿到路由的实例对象
// 在进行模块化导入的时候,如果给定的是文件夹,则默认导入这个文件夹下的index.js文件
// import router from "@/router/index.js";
import router from '@/router';
new Vue({
   
  render: (h) => h(App),
  // 在Vue项目中,要把路由用起来,必须把路由实例对象,通过下面的方式进行挂载
  // router: 路由的实例对象
  // router: router,
  //在ES6中,若对象属性名和本地变量名相同时,赋值可以省略冒号和值,直接写属性
  router,
}).$mount("#app");

2.2.4 声明路由链接和占位符

在 src/App.vue 组件中,使用 vue-router 提供的 <router-link><router-view> 声明路由链接和占位符:

<template>
  <div class="app-container">
    <h1>App2 组件</h1>
    <!-- 1. 定义路由链接 -->
    <a href="#/home"></a>
    <a href="#/movie"></a>
    <a href="#/about"></a>
    <hr />
    <!-- 2. 定义路由的占位符 -->
    <!-- 只要在项目中安装和配置了vue-router,就可以使用 router-view 组件了 -->
    <!-- 它的作用就是占位符 -->
    <router-view></router-view>
  </div>
</template>

<a>链接改为<router-link>,to属性相当于href,但to的属性值省去了#

<template>
  <div class="app-container">
    <h1>App2 组件</h1>
    <!-- 1. 定义路由链接 -->
    <!-- 当安装和配置了vue-router后,就可以使用router-link来代替普通的a链接-->
    <router-link to="/home"></router-link>
    <router-link to="/movie"></router-link>
    <router-link to="/about"></router-link>
    <hr />
    <!-- 2. 定义路由的占位符 -->
    <!-- 只要在项目中安装和配置了vue-router,就可以使用 router-view 组件了 -->
    <!-- 它的作用就是占位符 -->
    <router-view></router-view>
  </div>
</template>

2.2.5 声明路由的匹配规则

在 src/router/index.js 路由模块中,通过 routes 数组声明路由的匹配规则。示例代码如下:

import Vue from "vue";
import VueRouter from "vue-router";
// 2. 导入需要使用路由切换展示的组件
import Home from "@/components/Home.vue";
import Movie from "@/components/Movie.vue";
import About from "@/components/About.vue";
Vue.use(VueRouter);
// 2. 创建路由的实例对象,并传入参数
const router = new VueRouter({
   
  // routes 是一个数组,用来定义 “hash”与“组件”之间的对应关系
  // path表示要匹配的hash地址,这里不带#;component表示要展示的路由组件
  routes: 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值