Vue Router基础知识整理

news2024/11/26 16:48:51

Vue Router基础知识整理

  • 1. 安装与使用(Vue3)
    • 安装
    • 使用
  • 2. 配置路径别名@和VSCode路径提示(了解)
  • 3. 使用查询字符串或路径传参
    • query
    • 动态路由 与 params
  • 4. router-link、定义别名、定义路由名称、编程式导航
    • 定义别名 alias
    • router-link 与 定义路由名称
    • 编程式导航 router.push()
  • 5. 嵌套路由 children
  • 6. 重定向 redirect
  • 7. 全局前置守卫

官方文档-> Vue Router官方文档

1. 安装与使用(Vue3)

安装

npm install vue-router@4yarn add vue-router@4
版本4适用于Vue3,Vue2请使用版本3

使用

  • 文件结构:

在这里插入图片描述

  • @/router/index.js:
import { createRouter, createWebHistory } from "vue-router";

const routes = [
  {
    path: "/",
    component: ()=> import('@/views/index.vue'),
    name: 'index',
    meta: { title: '首页', icon: '', keepAlive: true }
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

export default router;
  • @/main.js:
import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index.js'

const app = createApp(App)
app.use(router)
app.mount('#app')

  • @/App.vue:
<template>
  <router-view v-if="!$route.meta.keepAlive"></router-view>
  <keep-alive>
    <router-view v-if="$route.meta.keepAlive"></router-view>
  </keep-alive>
</template>

<script setup>
</script>

2. 配置路径别名@和VSCode路径提示(了解)

(作为了解,新建Vue3项目时已配有)

  • 配置路径别名@在代码编写编写中代替 /src
    在这里插入图片描述
  • VSCode路径提示
    在这里插入图片描述

3. 使用查询字符串或路径传参

query

<template>
  <h1>我是首页</h1>
  <p>{{ route.query }}</p>
</template>
<script setup>
import { useRouter, useRoute } from 'vue-router'

const router = useRouter();
const route = useRoute();
</script>

(选项式API用this.$route.query
在这里插入图片描述

动态路由 与 params

@/router/index.js:

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

const routes = [
  {
    path: "/",
    component: ()=> import('@/views/index.vue'),
    name: 'index',
    meta: { title: '首页', icon: '', keepAlive: true }
  },
  {
    path: "/user/:id/username/:username",
    component: ()=> import('@/views/user.vue'),
    name: 'user',
    meta: { title: '个人主页', icon: '', keepAlive: true }
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

export default router;

:[parma参数名]?表示该参数可不填)

<template>
  <h1>我是个人主页</h1>
  <p>{{ route.params }}</p>
</template>
<script setup>
import { useRouter, useRoute } from 'vue-router'

const router = useRouter();
const route = useRoute();
</script>

(选项式API用this.$route.params
在这里插入图片描述

4. router-link、定义别名、定义路由名称、编程式导航

定义别名 alias

alias

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

const routes = [
  {
    path: "/",
    // alias: "/home", // 单个
    alias: ["/home", "/index"], // 多个
    component: ()=> import('@/views/index.vue'),
    name: 'index',
    meta: { title: '首页', icon: '', keepAlive: true }
  },
  {
    path: "/user/:id?/username/:username",
    component: ()=> import('@/views/user.vue'),
    name: 'user',
    meta: { title: '个人主页', icon: '', keepAlive: true }
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

路径//home/index 是同一页面

router-link 与 定义路由名称

  <router-link to="/home?title=标题&id=1006">查询字符串传参</router-link>
  <router-link :to="{path: '/home', query: { title : '标题', id: 1006 }}">查询字符串传参 - 动态属性绑定</router-link>

  <router-link to="/user/1006/username/hsy">路径传参</router-link>
  <router-link :to="{name: 'user', params: { id : 1006, username: 'hsy' }}">路径传参 - 动态属性绑定</router-link>

编程式导航 router.push()

<template>
  <button @click="goto(1)">跳转首页</button>
  <button @click="goto(2)">跳转个人主页</button>
</template>
<script setup>
import { useRouter, useRoute } from 'vue-router'

const router = useRouter();
const route = useRoute();

function goto(type = 1) {
  if(type === 1) {
    // router.push('/home?title=标题&id=1006')
    router.push({path: '/home', query: { title : '标题', id: 1006 }});
  } else {
    // router.push('/user/1006/username/hsy')
    router.push({name: 'user', params: { id : 1006, username: 'hsy' }});
  }
}
</script>

5. 嵌套路由 children

  • @/router/index.js:
import { createRouter, createWebHistory } from "vue-router";

const routes = [
  {
    path: "/",
    // alias: "/home", // 单个
    alias: ["/home", "/index"], // 多个
    component: ()=> import('@/views/index.vue'),
    name: 'index',
    meta: { title: '首页', icon: '', keepAlive: true }
  },
  {
    path: "/user/:id?/username/:username",
    component: ()=> import('@/views/user.vue'),
    name: 'user',
    meta: { title: '个人主页', icon: '', keepAlive: true }
  },
  {
    path: "/vip",
    component: ()=> import('@/views/vip/index.vue'),
    name: 'vip',
    meta: { title: '会员页', icon: '', keepAlive: true },
    children: [
      {
        path: 'info',
        component: ()=> import('@/views/vip/info.vue'),
      }
    ]
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

export default router;
  • @/views/vip/index.vue
<template>
  <h1>会员页</h1>
  -----------------------------
  <router-view></router-view>
  -----------------------------
</template>

6. 重定向 redirect

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

const routes = [
  {
    path: "/",
    // alias: "/home", // 单个
    alias: ["/home", "/index"], // 多个
    component: ()=> import('@/views/index.vue'),
    name: 'index',
    meta: { title: '首页', icon: '', keepAlive: true }
  },
  {
    path: "/user/:id?/username/:username",
    component: ()=> import('@/views/user.vue'),
    name: 'user',
    meta: { title: '个人主页', icon: '', keepAlive: true }
  },
  {
    path: "/vip",
    component: ()=> import('@/views/vip/index.vue'),
    name: 'vip',
    meta: { title: '会员页', icon: '', keepAlive: true },
    children: [
      {
        path: 'info',
        component: ()=> import('@/views/vip/info.vue'),
      }
    ]
  },
  {
    path: '/myhome',
    // redirect : '/',
    // redirect : '/?title=标题&id=1006',
    // redirect : {
    //   path: '/',
    //   query: {
    //     title: '标题',
    //     id: 1006,
    //   }
    // },
    // redirect : '/user/1006/username/hsy',
    redirect : {
      name: 'user',
      params: {
        username: 'hsy',
        id: 1006,
      }
    },
  }
]

const router = createRouter({
  history: createWebHistory(),
  routes,
})

export default router;

7. 全局前置守卫

main.js:

import { createApp } from 'vue'
import App from './App.vue'
import router from './router/index.js'

const app = createApp(App)
app.use(router)
//  路由前置守卫
router.beforeEach((to, from, next) => {
  console.log('即将进入的路由的信息to:',to);
  console.log('当前即将离开的路由的信息from:',from);
  if(to.name === "user") {
    // next(false); // 拦截不跳转
    next({path: '/home'}); // 拦截跳转到首页
  } else {
    next(); // 不拦截
  }
})
app.mount('#app')

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

由于找不到krpt.dll,无法继续执行代码的5种解决方法

在正常使用电脑的过程中&#xff0c;当尝试启动某个应用程序或者执行特定功能时&#xff0c;系统突然弹出一个错误提示窗口&#xff0c;明确指出由于缺失关键性文件——krpt.dll&#xff0c;导致当前运行的软件无法正常读取并执行相应的程序代码&#xff0c;进而无法顺利完成预…

HG泄露(ctfhub)

工具准备&#xff1a;dirsearch、dvcs-ripper 网络安全之渗透测试全套工具篇&#xff08;内含安装以及使用方法&#xff09;_dvcs-ripper-CSDN博客 dvcs-ripper&#xff1a;一款perl的版本控制软件信息泄露利用工具&#xff0c;支持bzr、cvs、git、hg、svn... tree //树状…

故障转移-redis

4.4.故障转移 集群初识状态是这样的&#xff1a; 其中7001、7002、7003都是master&#xff0c;我们计划让7002宕机。 4.4.1.自动故障转移 当集群中有一个master宕机会发生什么呢&#xff1f; 直接停止一个redis实例&#xff0c;例如7002&#xff1a; redis-cli -p 7002 sh…

Ubuntu22.04配置ROS2+PX4仿真环境

Ubuntu22.04配置ROS2PX4仿真环境 主要参考源&#xff1a; https://blog.csdn.net/weixin_44174421/article/details/135827130 https://blog.csdn.net/Zecet/article/details/130474620 一、准备工作 确保网络能够连接到github&#xff0c;出错主要源自于此&#xff1b;确保…

绝地求生更新反作弊系统“ZAKYNTHOS”杀疯了

绝地求生的反作弊系统“ZAKYNTHOS”近期取得了显著的成绩。从2024年1月1日至3月3日&#xff0c;共有117,3588个违规账号被封禁&#xff0c;其中107,3317个账号因使用外挂而被永久封禁。 根据官方每周封禁数据公告&#xff0c;1月至3月每周的永久封禁违规账号平均数高达13万&am…

牛客网刷题 | BC51 及格分数

描述 KiKi想知道他的考试分数是否通过&#xff0c;请帮他判断。从键盘任意输入一个整数表示的分数&#xff0c;编程判断该分数是否在及格范围内&#xff0c;如果及格&#xff0c;即&#xff1a;分数大于等于60分&#xff0c;是输出“Pass”&#xff0c;否则&#xff0c;输出“…

MDC使用手册精讲

MDC 背景&#xff1a; 线上排查问题时&#xff0c;请求在多个微服务之间进行调用&#xff0c;并发量较大的情况下&#xff0c;想跟踪某一个请求的链路&#xff0c;是需要花费一些时间才能梳理出来&#xff0c;而且还依赖于你的业务字段。而我们需要的是快速定位&#xff0c;快…

共享桌面,3分钟自己实现一个吧,还能听见麦克风声音哦

前言 关于【SSD系列】&#xff1a; 前端一些有意思的内容&#xff0c;旨在3-10分钟里&#xff0c; 500-1000字&#xff0c;有所获&#xff0c;又不为所累。 共享桌面程序&#xff0c;哇&#xff0c;高大尚耶&#xff01;其实不然&#xff0c;让我带你3分钟实现桌面共享程序&am…

9.Hexo通过partial文件传值和改变CSS属性

partials 基本上是可以在自己的HTML文件或.ejs文件中定义网站中不同组件的方法 如果想要为网站定义一个标头&#xff0c;这个标头将会很好地出现在网站的每个页面上 用partials可以创建一个.ejs文件&#xff0c;可以将该标头的所有代码存储在该文件中&#xff0c;然后当想要在…

面向对象的C++题目以及解法2

01串排序 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; class String { public:string str; String(const string& s) : str(s) {} int length() const {return str.length();}i…

预分频器×重装载值)/LSI频率 为什么等于总时间

1. 第一种算法理解&#xff1a;分频系数 64 &#xff0c;外部低速时钟40khz&#xff0c; 则一次计数周期1.6ms &#xff0c;计数625个数&#xff0c;则有625个周期 &#xff0c;1.6ms*625 等于1s 如果分频系数是64&#xff0c;外部低速时钟&#xff08;LSI&#xff09;频率是…

【开发问题记录】Nacos修改服务实例权重时报错

问题记录 一、问题描述1.1 产生原因1.2 产生问题 二、问题解决2.1 docker部署的nacos解决方案2.1.1 进入nacos容器2.1.2 查看当前目录2.1.3 进入data文件夹2.1.4 删除protocol文件2.2 本地部署的nacos 一、问题描述 1.1 产生原因 在运行项目时&#xff0c;在本地启动了一个服务…

隧道应急广播应该如何搭建?

隧道应急广播系统的搭建需遵循以下关键步骤&#xff0c;确保在紧急情况下能够迅速、准确地传达信息&#xff0c;保障人员安全&#xff1a; 1. 需求分析与规划设计&#xff1a; 明确目标&#xff1a;确定广播系统覆盖范围&#xff08;如隧道全长、出入口、避难所等关键位置&…

22 文件系统

了解了被打开的文件&#xff0c;肯定还有没被打开的文件&#xff0c;就是磁盘上的文件。先从磁盘开始认识 磁盘 概念 内存是掉电易失存储介质&#xff0c;磁盘是永久性存储介质 磁盘的种类有SSD&#xff0c;U盘&#xff0c;flash卡&#xff0c;光盘&#xff0c;磁带。磁盘是…

UE 录屏自动化上传阿里云OSS

前言 最近在做一个功能&#xff0c;然后就发现了一个很有趣的东西&#xff0c;虽然在一定程度上属于偷懒&#xff0c;但是在一些短频快的应用中还是很适用的&#xff0c;下面我就针对于这个测试做一些简单的分享&#xff0c;希望帮助到大家&#xff0c;在实际的开发中获得一些灵…

三大变换(杂乱)

任何一个函数都可以看成是若干个三角函数的加权和 一、傅里叶变换 1、推导过程 资料&#xff1a;https://www.bilibili.com/video/BV1pW411J7s8/?spm_id_from333.1007.top_right_bar_window_history.content.click &#xff08;1&#xff09; e i θ e^{i\theta} eiθ代表…

策略模式:灵活调整算法的设计精髓

在软件开发中&#xff0c;策略模式是一种行为型设计模式&#xff0c;它允许在运行时选择算法的行为。通过定义一系列算法&#xff0c;并将每个算法封装起来&#xff0c;策略模式使得算法可以互换使用&#xff0c;这使得算法可以独立于使用它们的客户。本文将详细介绍策略模式的…

前端大文件上传 -- 上传文件到S3或本地服务器

特别提醒 大文件上传的文件切片逻辑, 包括如何将分片文件上传到本地服务器, 请查看之前的文章: 前端大文件上传 - 总结&#xff08;Vue3 hook Web Worker实现&#xff0c;通过多个Worker线程大大提高Hash计算的速度&#xff09;, 本篇仅实现如何将大文件分块上传到S3. 后面写…

Yolo-world使用

1、安装 python pip install ultralytics 前往官网下载模型&#xff1a;https://docs.ultralytics.com/models/yolo-world/#key-features 我这里使用yolov8s-world.pt举例 最简单的使用示例 if __name__ __main__:model YOLO(model/yolov8s-world.pt)results model.pre…

力扣101. 对称二叉树(java)

思路&#xff1a; 一、验证 左右子树是否可翻转对称的&#xff1f; 二、分析左右子树情况&#xff1a; 1&#xff09;左右都也空 对称 2&#xff09;左右有一个为空 不对称 3&#xff09;左右都不为空&#xff0c;但数字不同 不对称 4&#xff09;左右都不为空&#xff0c;且数…