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><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.hqwc.cn/news/625151.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

本地搭建属于你自己的AI搜索引擎 支持多家AI模型

FreeAskInternet 是一个完全免费、私有且本地运行的搜索聚合器&#xff0c;并使用 MULTI LLM 生成答案&#xff0c;无需 GPU。用户可以提出问题&#xff0c;系统将进行多引擎搜索&#xff0c;并将搜索结果合并到LLM中&#xff0c;并根据搜索结果生成答案。全部免费使用。 项目…

笔记本电脑上的聊天机器人: 在英特尔 Meteor Lake 上运行 Phi-2

对应于其强大的能力&#xff0c;大语言模型 (LLM) 需要强大的算力支撑&#xff0c;而个人计算机上很难满足这一需求。因此&#xff0c;我们别无选择&#xff0c;只能将它们部署至由本地或云端托管的性能强大的定制 AI 服务器上。 为何需要将 LLM 推理本地化 如果我们可以在典配…

VScode配置launch+tasks[自己备用]

VScode配置launchtasks[自己备用]&#xff0c;配置文件详解 launch.json 字段 name &#xff1a;启动配置的名称&#xff0c;也就是显示在调试配置下拉菜单中的名字&#xff0c;如果添加了多个配置可以用此作为区分 字段 program &#xff1a;可执行文件完整路径。 ① 由于 C…

8thWall vs. AR.js

对于熟悉 JavaScript、WebGL 和 HTML5 等 Web 技术的数字创作者来说&#xff0c;8th Wall 提供了功能丰富且强大的 AR 开发平台&#xff0c;尽管价格较高。 然而&#xff0c;新手开发人员和专注于基于标记的 AR 的开发人员可能会发现 AR.js 更易于使用且更经济实惠。 1、8th Wa…

STM32 F103 C8T6开发笔记14:与HLK-LD303-24G测距雷达通信

今日尝试配通STM32 F103 ZET6与HLK-LD303-24G测距雷达的串口通信解码 文章提供测试代码...... 目录 HLK-LD303-24G测距雷达外观&#xff1a; 线路连接准备&#xff1a; 定时器与串口配置准备&#xff1a; 定时器2的初始化&#xff1a; 串口1、2初始化&#xff1a; 串口1、2自定…

PHP一句话木马

一句话木马 PHP 的一句话木马是一种用于 Web 应用程序漏洞利用的代码片段。它通常是一小段 PHP 代码&#xff0c;能够在目标服务器上执行任意命令。一句话木马的工作原理是利用 Web 应用程序中的安全漏洞&#xff0c;将恶意代码注入到服务器端的 PHP 脚本中。一旦执行&#xf…

python-matplotlib(二)3D图形绘制

一、绘制线形图 Axes3D.plot 函数用来绘制线形图。 import matplotlib.pyplot as plt import numpy as npfrom mpl_toolkits.mplot3d import Axes3Dfig plt.figure() ax fig.add_subplot(projection3d)x np.linspace(-10, 10, 1000) y np.linspace(-10, 10, 1000) z np.…

MySQL 试图

视图功能在 5.0 以后的版本启用 视图是一张虚表。数据表确实包含了具体数据并且保存到硬盘中的实表。视图使用数据检索语句动态生 成的一张虚表。每一次数据服务重启或者系统重启之后&#xff0c;在数据库服务启动期间&#xff0c;会使用创建视图的语 句重新生成视图中的数据&…

命令模式

命令模式&#xff1a;将一个请求封装为一个对象&#xff0c;从而使你可用不同的请求对客户进行参数化&#xff1b;对请求排队或记录请求日志&#xff0c;以及支持可撤销的操作。 命令模式的好处&#xff1a; 1、它能较容易地设计一个命令队列&#xff1b; 2、在需要的情况下&a…

VScode插件发布

背景 上期在初涉 VS Code 插件开发-CSDN博客中&#xff0c;通过Yeoman工具创建了第一个插件项目&#xff0c;在helloworld的基础上修改&#xff0c;实现预期的功能后&#xff0c;需要将VScode插件发布到插件市场中使用。 官方文档&#xff1a;Publishing Extensions | Visual…

Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation论文速读

文章目录 Spectral Adversarial MixUp for Few-Shot Unsupervised Domain Adaptation摘要方法Domain-Distance-Modulated Spectral Sensitivity (DoDiSS&#xff09;模块Sensitivity-Guided Spectral Adversarial Mixup (SAMix)模块 实验结果 Spectral Adversarial MixUp for F…

Vue(二)

文章目录 1.条件渲染1.关于js中的false的判定2.基本介绍3.v-if1.需求分析2.代码实例 4.v-show实现5.v-if与v-show比较6.课后练习 2.列表渲染1.代码实例2.课后练习 3.组件化编程1.基本介绍2.实现方式一_普通方式2.实现方式二_全局组件方式3.实现方式三_局部组件方式 4.生命周期和…