Vue Router基础知识整理

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  v-slot="{ Component }" v-if="$route.meta.keepAlive">
      <keep-alive>
        <component :is="Component"></component>
      </keep-alive>
  </router-view>
  
  <!-- 以下为版本3可支持写法 -->
  <!-- <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.mfbz.cn/a/567461.html

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

相关文章

目标检测——行人交通信号灯数据集

一、重要性及意义 行人交通信号灯检测的重要性及意义主要体现在以下几个方面&#xff1a; 首先&#xff0c;行人交通信号灯检测对于提高道路安全性至关重要。通过准确识别交通信号灯的状态&#xff0c;行人可以更加清晰地了解何时可以安全地过马路&#xff0c;从而避免与车辆…

混合云构建-如何创建一个高可用的Site to Site VPN 连接 Azure 和GCP云

在现代云计算环境中,企业通常会采用多云战略,将工作负载分布在不同的云服务提供商上。这种方式可以提高可用性、降低供应商锁定风险,并利用每个云提供商的独特优势。然而,在这种情况下,需要确保不同云环境之间的互联互通,以实现无缝的数据传输和应用程序集成。 本文将详细介绍…

利用ollama和open-webui本地部署通义千问Qwen1.5-7B-Chat模型

目录 1 安装ollama 2 安装open-webui 2.1 镜像下载 3 配置ollama的模型转换工具环境 3.1 下载ollama源码 3.2 下载ollama子模块 3.3 创建ollama虚拟环境 3.4 安装依赖 3.5 编译量化工具 7 创建ollama模型 8 运行模型 参考文献&#xff1a; 1 安装ollama curl -fsSL …

C语言单向链表的经典算法

1.分割链表 2.移除链表元素 3.反转链表 4.合并两个有序链表 5.链表的中间结点 6.环形链表的约瑟夫问题 1.分割链表: 1.思路&#xff1a;创建新链表&#xff0c;小链表和大链表。如图 代码如下 /*** Definition for singly-linked list.* struct ListNode {* int val…

android学习笔记(二)

1、自定义View。 package com.example.view; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.View; //可以在View测量和布局完成后…

前端性能分析工具及使用

Lighthouse Lighthouse &#xff08;谷歌浏览器的插件商店中搜索并安装&#xff0c;浏览器中点击F12&#xff0c;开发者工具中可使用&#xff09;是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。只要…

医学访问学者专栏—研究领域及工作内容

在国外访问学者申请中&#xff0c;医学领域的研究、教学及从业人员占有相当大的比例&#xff0c;这些医学访问学者的研究领域及工作内容都有哪些&#xff1f;本文知识人网小编就相关问题进行详细阐述&#xff0c;并附带案例说明。 一、在国外做医学访问学者可以从事哪些工作&am…

智慧水务是什么样的?如何打造智慧水务大屏?

在信息化和数字化快速发展的今天&#xff0c;智慧水务作为城市供水管理的重要组成部分&#xff0c;正变得越来越重要。智慧水务大屏作为智慧水务系统的可视化核心&#xff0c;不仅提升了水务管理的效率&#xff0c;而且通过数据的实时监控和分析&#xff0c;为决策者提供了强有…

2024最新SSL证书在线申请系统源码 | 支持API接口 支持在线付费 二开优化版

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 2024最新SSL证书在线申请系统源码 | 支持API接口 支持在线付费 二开优化版 最新SSL证书在线申请系统源码 | 支持API接口 SSL证书保证网络安全的基本保障。向您介绍我们的在线生成SSL…

电路中的过压(OVP)保护电路

硬件工程师常会遇到这种情况&#xff0c;比如芯片的工作电压是5V ,但供电电压因浪涌或静电造成电压会出现超过6.5V或更高&#xff0c;而芯片能承受最高工作电压6.3V&#xff0c;这时如果选用TVS&#xff08;ESD&#xff09;, TVS因为钳位电压VC超过6.5V &#xff0c;所以无法起…

C++ 模板详解——template<class T>

一. 前言 在我们学习C时&#xff0c;常会用到函数重载。而函数重载&#xff0c;通常会需要我们编写较为重复的代码&#xff0c;这就显得臃肿&#xff0c;且效率低下。重载的函数仅仅只是类型不同&#xff0c;代码的复用率比较低&#xff0c;只要有新类型出现时&#xff0c;就需…

2024统计建模:大数据与人工智能时代的统计研究

文章目录 题目解读你需要具备的知识点课题推荐视频分析 题目解读 主要做的是“大数据”与“人工智能”。 其中“大数据”所涉及的的第一个就是大量的数据&#xff0c;数据从哪里来&#xff1f;拿到数据后&#xff0c;我们需要做基本的数据分析&#xff0c;如何对大量的数据进…

图像处理技术与应用(一)

图像处理技术与应用入门 使用skimage进行图像读取和显示 skimage库&#xff08;Scikit-image&#xff09;提供了一个强大的工具集&#xff0c;用于执行各种图像处理任务。以下是如何使用skimage读取和显示图像的基本示例&#xff1a; from skimage import ioimg io.imread(…

Shopee日破8000单无货源大卖选品案例分享

选品是电商成功路上至关重要的一环&#xff0c;为了帮助虾皮商家更好地掌握选品技巧和打造爆款&#xff0c;在知虾当中涵盖了22项极具实用性的选品方法。本文以男士包类目&#xff0c;结合比较常用的热销跟卖法为例&#xff0c;介绍下如何通过核心指标及维度去落地选品。 分析…

AI人工智能培训老师叶梓:大数据治理的关键工具:开源数据血缘分析系统

在大数据时代&#xff0c;数据的产生和传播速度日益加快&#xff0c;数据之间的关系也变得日益复杂。为了更好地管理和理解数据之间的关系&#xff0c;数据血缘分析系统应运而生。本文将介绍几个开源的数据血缘分析系统&#xff0c;它们在数据治理、数据质量管理和数据隐私保护…

我宣布!软考真的是0基础小白的福音

大家为什么觉得有的证书是智商税呢&#xff1f;无非就是证书含金量达不到企业对于人才的选拔标准&#xff0c;或是满足不了自身的职业发展需要。 但是一方面大家又知道&#xff0c;含金量高且企业认可度高的证书&#xff0c;要么是价格太贵&#xff0c;要不就是考试难度大&…

个人音乐播放网站项目(SpringBoot+Linux部署上线)

在做完第一个博客系统项目以后&#xff0c;接着做下一个项目&#xff1a;音乐播放网站项目&#xff0c;此项目应用的技术栈和第一个项目是差不多的&#xff0c;即算是学完SSM等知识以后的两个入门级Java开发项目吧。 此项目包含的核心功能有&#xff1a; 一、登录、注册、退出…

知了汇智携手西科大举办“知了杯”网络安全趣味赛,共筑网络空间安全防线

为积极响应国家网络空间安全人才战略&#xff0c;加快攻防兼备网络创新人才培养步伐&#xff0c;实现以赛促学、以赛促教、以赛促用&#xff0c;推动网络空间安全人才培养和产学研用生态发展&#xff0c;成都知了汇智科技有限公司&#xff08;以下简称&#xff1a;知了汇智&…

随笔Ubuntu上的的一些使用

Ubuntu简易使用 常用指令 cdlsmkdirrf -rm 路径 换源 备份镜像 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak编辑文件设置 sudo gedit /etc/apt/sources.list清华源 # 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe mul…

数据库轻松切换:解读Spring中的AbstractRoutingDataSource

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数据库轻松切换&#xff1a;解读Spring中的AbstractRoutingDataSource 前言AbstractRoutingDataSource介绍作用和优势&#xff1a;作用&#xff1a;优势&#xff1a; 使用 AbstractRoutingDataSource …
最新文章