Vue3--Vue Router详解--学习笔记

1. 认识vue-router

Angular的ngRouter
React的ReactRouter
Vue的vue-router

Vue Router 是Vue.js的官方路由:

  • 它与Vue.js核心深度集成,让Vue.js构建单页应用(SPA)变得非常容易;
  • 目前Vue路由最新的版本是4.x版本。

vue-router是基于路由和组件的

  • 路由用于设定访问路径,将路径和组件映射起来
  • 在vue-router的单页面应用中,页面的路径的改变就是组件的切换

安装Vue Router

npm install vue-router

2. 路由的基本使用

App.vue

<template>
   <div>
    <div>app</div>
    <router-link to="/home">首页</router-link>
    <router-link to="/about">关于</router-link>
    <router-view></router-view>
   </div>
</template>

<script>

</script>

<style>

</style>

router/index.js

import { createRouter,createWebHashHistory,createWebHistory } from "vue-router";

import Home from '../Views/Home.vue'
import About from '../Views/About.vue'
// 创建一个路由:映射关系
const router = createRouter({
  // 指定采用的模式  hash
  // history:createWebHashHistory(),
  // 使用history模式
  history:createWebHistory(),
  routes:[
    {path:'/',redirect:'/home'},
    {
      path:"/home",
      component:Home
    },
    {
        path:"/about",
        component:About
    }
  ]
})

export default router

Home.vue

<template>
  <div>
   home
  </div>
</template>

<script>
  export default {
    // name:"Home"
  }
</script>

<style scoped>

</style>

About.vue

<template>
  <div>
    About
  </div>
</template>

<script>
  export default {

  }
</script>

<style scoped>

</style>

3.路由模式 (history和hash)

   // 指定采用的模式  hash
   history:createWebHashHistory(),
  // 使用history模式
  history:createWebHistory(),

4. 不记录历史(replace)

<router-link to="/about" replace>关于</router-link>

5. to属性绑定对象

    <router-link :to="{path:'/about'}" replace>关于</router-link>

6. 所在路由样式修改

   .router-link-active{
      color: red;
      font-size: 30px;
   }

设置默认选中class (active-class)

<router-link :to="{path:'/about'}" active-class="link-active">关于</router-link>

7. 路由的懒加载和其他属性

分包处理

const Home = () => import("../Views/Home.vue");
const About = () => import("../Views/About.vue");

分包处理后,不知道那个文件编译打包的,我们可以用魔法注释 (/ webpackChunkName:‘about’ /)
在这里插入图片描述

const Home = () => import(/* webpackChunkName:'home' */"../Views/Home.vue");
const About = () => import(/* webpackChunkName:'about' */"../Views/About.vue");

8.获取参数

在template中获取

{{  $route.params.id }}

在compistion-api中获取

<script setup>
  import { useRoute,onBeforeRouteUpdate } from 'vue-router';
  const route = useRoute();
  console.log(route.params.id)

  // 获取route跳转id (路由守卫)
  onBeforeRouteUpdate((to,from)=>{
    console.log("from:",from.params.id)
    console.log("to:",to.params.id)
  })
</script>

在options-api中获取id

this.$route.params.id

9.路由不存在

router/index.js

{
      path:"/:pathMatch(.*)*",
      component:()=>import('../Views/Notfound.vue')
    }

Notfound.vue

<template>
  <div>
    您的页面没找到{{ $route.params.pathMatch }}
  </div>
</template>

<script>
  export default {

  }
</script>

<style scoped>

</style>

10.编程式路由跳转的使用

<template>
     <!-- 其他元素调整 -->
    <span @click="go_home">首页</span>
    <button @click="go_about">关于	    </button>
</template>
<script setup>
   import { useRouter } from 'vue-router';
   const router = useRouter()
   // 监听元素点击
   function go_home(){
      // 调整到首页
      // router.push('/home')
      router.push({
         // name:"home"
         path:'/home'
      })
   }

   function go_about(){
      // 调整到关于
      router.push({
         path:'/about',
         query:{
            name:'why',
            age:18
         }
      })
   }
</script>

options-api写法

<script>
   export default{
      methods:{
         go_home:function(){
            // 调整到首页
            // router.push('/home')
            this.$router.push({
               // name:"home"
               path:'/home'
            })
         },
         go_about:function(){
            // 调整到关于
            this.$router.push({
               path:'/about',
               query:{
                  name:'why',
                  age:18
               }
            })
         }
      }
   }
</script>

页面的前进和后退

<script setup>
import { useRouter } from 'vue-router'

const router = useRouter();
function back(){
  // router.back()
  //  router.forward()

  // go(delta)
  // go(1) -> forward();
  // go(-1) -> back()
  router.go(-1)
}
</script>

11. 动态添加路由

动态添加路由
router/index.js

let isAdmin = true
if(isAdmin){
  // 一级路由
  router.addRoute({
    path:"/admin",
    component:()=>import("../Views/Admin.vue")
  })
  // 添加vip页面
  router.addRoute("home",{
    path:"vip",
    component:()=>import('../Views/HomeVip.vue')
  })
}

删除路由有以下三种方式:

  • 方式一:添加一个name相同的路由
    在这里插入图片描述

  • 方式二:通过removeRoute方法,传入路由的名称
    在这里插入图片描述

  • 方式三:通过addRoute方法的返回值回调

在这里插入图片描述
路由的其他方法补充

  • router.hasRoute():检查路由是否存在。
  • router.getRoutes():获取一个包含所有路由记录的数组。

12. 路由导航守卫

vue-router提供的导航守卫主要用来通过跳转或取消的方式守卫导航
全局的前置守卫beforeEach是在导航触发时会被回调的:
它有两个参数:

  • to:即将进入的路由Route对象;
  • from:即将离开的路由Route对象;

它有返回值:

  • false:取消当前导航
  • 不返回或者undefined:进行默认导航
  • 返回一个路由地址:
    1. 可以是一个string类型的路径
    2. 也可以是一个对象,对象中包含path,query,params等信息
      可选的第三个参数:next(不推荐使用)
    • 在Vue2中我们是通过next函数来决定如何进行跳转的;
    • 但是在Vue3中我们是通过返回值来进行控制的,不再推荐使用next函数,这是因为开发中很容易调用多次next;

Vue-Router还提供了很多其他守卫函数,目的都是在某一个时刻给予我们回调,让我们可以更好的控制程序的流程或者功能:
https://next.router.vuejs.org/zh/guide/advanced/navigation-guards.html

我们一起来看一下完整的导航解析流程:

  • 导航的触发
  • 在失活的组件里调用beforeRouteLeave守卫。
  • 调用全局的beforeEach守卫
  • 在重用的组件里调用beforeRouteUpdate守卫
  • 在路由配置里调用beforeEnter
  • 解析一部路由组件
  • 在被激活的beforeResolve守卫
  • 导航被确认
  • 调用全局的afterEach钩子
  • 触发DOM更新
  • 调用beforeRouterEnter守卫中传给next的回调函数,创建好的组件实例会作为回调函数的传入参数。

感谢大家观看,我们下次再见

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/164986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

图像处理01 小波变换

一.为什么需要离散小波变换 连续小波分解&#xff0c;通过改变分析窗口大小&#xff0c;在时域上移动窗口和基信号相乘&#xff0c;最后在全时域上整合。通过离散化连续小波分解可以得到伪离散小波分解&#xff0c; 这种离散化带有大量冗余信息且计算成本较高。 小波变换的公…

Java拼图

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下&#xff1a; package heima;import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import jav…

LeetCode - 622. 设计循环队列(C语言,顺序存储结构,配图)

622. 设计循环队列 - 力扣&#xff08;LeetCode&#xff09; 设计循环队列&#xff0c;我们可以从顺序结构和链式结构来考虑&#xff0c;但因为链式结构实现起来较为复杂&#xff0c;不易理解&#xff0c;且主流使用顺序存储&#xff0c;所以本文就是用顺序存储结构实现。 因为…

《轻松入门!快速安装PyCharm,打造高效Python编程环境》

「Pycharm安装包和相关插件&#xff08;Windows 64位&#xff09;」https://www.aliyundrive.com/s/jByv6vjShVz 提取码: 1234 视频教程&#xff1a;https://www.douyin.com/video/7303106933521763596?previous_pageapp_code_link 第一步&#xff1a;找到一起下载的Pycharm安…

Linux:安装软件的两种方式rpm和yum

一、rpm方式 1、简单介绍 RPM是RedHat Package Manager的缩写&#xff0c;它是Linux上打包和安装的工具。通过rpm打包的文件扩展名是.RPM。这个安装包就类似Windows系统中的.exe文件。rpm工具实现Linux上软件的离线安装。 2、软件相关信息的查询命令 查询Linux系统上所有已…

数睿通2.0数据接入、数据开发、系统权限、集群监控全面升级

引言 数睿通 2.0 数据中台迎来了11月份的更新&#xff0c;感谢大家的支持&#xff0c;本次更新主要包括以下内容&#xff1a; 数据库支持 MongoDB数据接入支持 MongoDB&#xff0c;支持自定义 SQL 采集&#xff0c;支持停止运行中的任务数据生产支持 FlinkJar 任务&#xff0…

吴恩达《机器学习》9-1-9-3:反向传播算法、反向传播算法的直观理解

一、正向传播的基础 在正向传播中&#xff0c;从神经网络的输入层开始&#xff0c;通过一层一层的计算&#xff0c;最终得到输出层的预测结果。这是一种前向的计算过程&#xff0c;即从输入到输出的传播。 二、反向传播算法概述 反向传播算法是为了计算代价函数相对于模型参数…

LeetCode【13】罗马数字转整数

题目&#xff1a; 思路&#xff1a; 第十二题的逆运算&#xff0c;方法同理。需要注意的是IV、IX、XL、XC、CD、CM这六种特殊的情况。正常情况下每个字符找到对应的数值累加&#xff0c;这六种特殊字符都是左边的数值比右边的数值小。 这里以IV举例&#xff0c;IV对应数字是1和…

EMNLP2023 | 基于显式证据推理的few-shot关系抽取CoT

深度学习自然语言处理 原创作者&#xff1a;wkk 论文&#xff1a;Chain of Thought with Explicit Evidence Reasoning for Few-shot Relation Extraction地址&#xff1a;https://arxiv.org/abs/2311.05922 摘要 Few-shot关系提取涉及使用有限数量的注释样本识别文本中两个特定…

数据结构与算法之美学习笔记:22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?

目录 前言应用五&#xff1a;负载均衡应用六&#xff1a;数据分片应用七&#xff1a;分布式存储解答开篇 & 内容小结 前言 本节课程思维导图 今天&#xff0c;我们再来看剩余三种应用&#xff1a;负载均衡、数据分片、分布式存储。你可能已经发现&#xff0c;这三个应用都…

gitlab环境准备

1.准备环境 gitlab只支持linux系统&#xff0c;本人在虚拟机下使用Ubuntu作为操作系统&#xff0c;gitlab镜像要使用和操作系统版本对应的版本&#xff0c;(ubuntu18.04,gitlab-ce_13.2.3-ce.0_amd64 .deb) book100ask:/$ lsb_release -a No LSB modules are available. Dist…

YARN,ZOOKEERPER--学习笔记

1&#xff0c;YARN组件 1.1YARN简介 YARN表示分布式资源调度&#xff0c;简单地说&#xff0c;就是&#xff1a;以分布式技术完成资源的合理分配&#xff0c;让MapReduce能高效完成计算任务。 YARN是Hadoop核心组件之一&#xff0c;用于提供分布式资源调度服务。 而在Hadoop …

公司内部网络架设悟空CRM客户管理系统 cpolar无需公网IP实现内网,映射端口外网访问

1、什么是内网穿透&#xff1f; 内网穿透&#xff0c;即内网映射&#xff0c;内网IP端口映射到外网的过程。是一种主动的操作&#xff0c;需要本人一些内网的权限。比如在公司自己电脑&#xff0c;将办公OA发布到互联网&#xff0c;然后提供外网在家或出差在外连接访问。 可以…

【信息安全】浅谈三种XSS(跨站脚本攻击)的攻击流程与防御措施

银狼美图镇楼 XSS 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;是一种常见的Web安全漏洞&#xff0c;攻击者通过在Web应用中注入恶意脚本&#xff0c;使得浏览器在解析页面时执行该脚本&#xff0c;从而实现攻击目的。 类型 存储型XSS&…

Ubuntu中apt-get update显示域名解析失败

第一步 检查主机->虚拟机能否ping成功 ping 红色框中的IPv4地址 能通&#xff0c;表示虚拟机ip配置成功;否则&#xff0c;需要先配置虚拟机ip 第二步 检查是否能ping成功百度网址 ping www.baidu.com 若不成功&#xff0c;可能原因 虚拟机没联网&#xff0c;打开火狐浏览器…

leetcode刷题日记:190. Reverse Bits(颠倒二进制位)和191. Number of 1 Bits( 位1的个数)

190. Reverse Bits&#xff08;颠倒二进制位&#xff09; 题目要求我们将一个数的二进制位进行颠倒&#xff0c;画出图示如下(以8位二进制为例)&#xff1a; 显然对于这种问题我们需要用到位操作&#xff0c;我们需要将原数的每一位取出来然后颠倒之后放进另一个数。 我们需要…

CHM文件阅读必备:CHM Viewer Star 免激活

CHM Viewer Star for Mac是一款针对Mac系统的CHM文件查看器&#xff0c;具有以下功能特点&#xff1a; 快速打开和加载CHM文件&#xff1a;采用高效的解码引擎&#xff0c;可以快速打开和阅读CHM文件&#xff0c;同时系统资源占用少&#xff0c;用户可以流畅地阅读大型CHM文件…

文本向量化

文本向量化表示的输出比较 import timeimport torch from transformers import AutoTokenizer, AutoModelForMaskedLM, AutoModel# simcse相似度分数 def get_model_output(model, tokenizer, text_str):"""验证文本向量化表示的输出:param model: 模型的…

分组交换技术

目录 一、新型计算机网络的基本特点 二、电路交换 1、回顾电路交换的原理 2、使用交换机连接许多部电话 3、电路交换举例 4、电路交换的三个阶段 5、电路交换的特点 三、分组交换 1、因特网有边缘部分与核心部分组成 2、分组交换的原理 3、分组交换的优点 4、存储转…

RepVgg: 网络结构重参化

CVPR2021 截至目前1004引 论文连接 代码连接 文章提出的问题 大多数的研究者追求的是设计一个好的网络结构,这种“好”体现在网络具有复杂的网络设计,这种网络虽然比简单的网络收获了更加高的准确率,但是网络结构中的大量并行分支,导致模型的难以应用和自定义,主要体现…