(11)Vue-Router路由的详细使用
本系列教程目录:Vue3+Element Plus全套学习笔记-目录大纲
文章目录
- 第2章 路由 Vue-Router
- 2.1 Vue路由快速入门
- 2.1.1 创建项目
- 2.1.2 路由运行流程
- 2.2 传递参数-useRoute
- 2.2.1 路径参数-params
- 1)普通传参
- 2)传递多个参数
- 3)对象方式传参
- 2.2.2 查询参数-query
- 1)普通传参
- 2)对象方式传参
- 2.3 嵌套路由
- 2.4 路由跳转-useRouter
- 2.5 Vue导航守卫
- 2.5.1 全局守卫
- 2.5.2 路由守卫
- 2.5.3 组件内守卫
第2章 路由 Vue-Router
传统的页面应用,是用一些超链接来实现页面切换和跳转的。Vue创建的项目是单页面应用,如果想要在项目中模拟出来类似于页面跳转的效果,就要使用路由。在vue-router单页面应用中,切换页面是路径之间的切换,实际上就是组件的切换。路由就是SPA(单页应用)的路径管理器。
vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。
2.1 Vue路由快速入门
2.1.1 创建项目
首先创建一个Vite工程:
npm create vite
进入Vtie工程,安装vite依赖:
npm install
安装vue-router组件:
npm install vue-router
2.1.2 路由运行流程
在src/components下定义index.vue、demo01.vue、demo02.vue,在src目录下新建router目录(该目录名任意),在该目录下新建一个index.js,下面是路由的具体配置信息:
// 导入VueRouter中的createRouter和createWebHashHistory函数
import {createRouter, createWebHashHistory} from 'vue-router'
// 导入index组件
import index from '../components/index.vue'// 定义路由表
const routes = [// path: 组件访问的路径,component: 对应的组件{path: '/index', component: index},// 快捷写法{path: '/demo01', component: () => import('../components/demo01.vue')},{path: '/demo02', component: () => import('../components/demo02.vue')}
]// 创建路由实例
const router = createRouter({history: createWebHashHistory(),routes: routes
})// 导出路由
export default router
在main.js中修改Vue实例,将路由注册到Vue实例中让其生效:
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'// 导入路由
import router from "./router/index.js";// 创建Vue实例
let app = createApp(App);// 注册路由
app.use(router)// 挂载容器
app.mount('#app')
App.vue:
<template><div><h1>Welcome to App</h1><!-- 配置路由跳转 --><router-link to="/index">Go to index</router-link><br><router-link to="/demo01">Go to demo01</router-link><br><router-link to="/demo02">Go to demo02</router-link><hr><!-- 路由视图占位符 --><router-view /></div></template>
效果如下:
2.2 传递参数-useRoute
vue 路由传参的使用场景一般都是应用在父路由跳转到子路由时,携带参数跳转。传参方式可划分为 params 传参和 query 传参,而 params 传参又可分为在 url 中显示参数和不显示参数两种方式,这就是vue路由传参的三种方式。
2.2.1 路径参数-params
路径参数是params传参的一种方式,类似于SpringMVC中的@PathVariable注解,即将参数传递的参数放在路径的一部分。
1)普通传参
定义一个article组件:
<script setup>
// 导入useRoute对象
import {useRoute} from "vue-router";// 获取route对象
let route = useRoute();console.log('route对象:', route);
</script><template><div><!-- 通过全局$route对象获取参数 --><h3>通过全局$route对象获取params对象:</h3><h4> {{ $route.params }}</h4><hr><!-- 通过route对象获取参数 --><h3>通过全局route对象获取params对象: </h3><h4> {{ route.params }}</h4></div></template>
定义路由:
{path: '/article/:id', component: () => import('../components/test01/article.vue')}
在App.vue添加链接路径:
<template><div><h2>Welcome to App</h2><!-- 配置路由跳转 --><router-link to="/index">Go to index</router-link><br><router-link to="/article/100">Go to article-100</router-link><br><router-link to="/article/200">Go to article-200</router-link><hr><!-- 路由视图占位符 --><router-view /></div></template>
效果如下:
2)传递多个参数
使用路径传参想要传递多个参数只要在路径上写上多个参数即可。
定义路由:
{path: '/user/:id/:name/:age', component: () => import('../components/test01/user.vue')},
在App.vue添加链接路径:
<template><div><h2>Welcome to App</h2><!-- 配置路由跳转 --><router-link to="/index">Go to index</router-link><br><router-link to="/user/100/小灰/20">Go to user-小灰</router-link><br><router-link to="/user/200/小蓝/25">Go to user-小蓝</router-link><hr><!-- 路由视图占位符 --><router-view /></div></template>
效果如下:
3)对象方式传参
对象传参允许我们在link标签处传递类似于JSON对象形式的参数。
Tips:在使用对象方式传参时是借助组件的名称进行跳转,因此在定义路由时一定要为组件命名。
定义路由:
// 对象传参一定要有name属性
{name: "goods", path: '/goods/:id/:name/:price/:desc', component: () => import('../components/test01/goods.vue')
},
在App.vue添加链接路径:
<template><div><h2>Welcome to App</h2><!-- 配置路由跳转 --><router-link to="/index">Go to index</router-link><br><router-link :to="{name: 'goods',params: {id: 100,name: '小米10至尊纪念版',price: 5899.00,desc:'性能超级强悍'}}">Go to goods-手机</router-link><br><router-link :to="{name: 'goods',params: {id: 200,name: '机械革命无界15 X Pro暴风雪',price: 48990.00,desc:'性能强悍,性价比高'}}">Go to goods-笔记本</router-link><hr><!-- 路由视图占位符 --><router-view/></div></template>
效果如下:
2.2.2 查询参数-query
query传参方式会把参数以问号拼接到路由上面;类似于我们直接在URL地址栏上输入的参数。
1)普通传参
定义组件:
<script setup>
// 导入useRoute对象
import {useRoute} from "vue-router";// 获取route对象
let route = useRoute();</script><template><div><!-- 通过全局$route对象获取参数 --><h3>通过全局$route对象获取params对象:</h3><!-- 注意:此时是通过query对象获取参数, 而非params对象 --><h4> {{ $route.query }}</h4><hr><!-- 通过route对象获取参数 --><h3>通过全局route对象获取params对象: </h3><!-- 注意:此时是通过query对象获取参数, 而非params对象 --><h4> {{ route.query }}</h4></div></template>
定义路由:
{name: 'dept',path: '/dept', component: () => import('../components/test01/dept.vue')},
在App.vue添加链接路径:
<template><div><h2>Welcome to App</h2><!-- 配置路由跳转 --><router-link to="/index">Go to index</router-link><br><router-link to="/dept?id=100&name=研发部">Go to article-研发部</router-link><br><router-link to="/dept?id=200&name=市场部">Go to article-市场部</router-link><!-- 路由视图占位符 --><router-view/></div></template>
效果如下:
2)对象方式传参
同样的,使用query方式传参也支持对象方式传递参数。
在App.vue添加链接路径:
<template><div><h2>Welcome to App</h2><router-link to="/index">Go to index</router-link><br><router-link :to="{// name和path都可以传递参数name: 'dept',query: {id: 100,name: '研发部'}}">Go to article-研发部</router-link><br><router-link :to="{// name和path都可以传递参数// name: 'dept',path: '/dept',query: {id: 200,name: '市场部'}}">Go to article-市场部</router-link><!-- 路由视图占位符 --><router-view/></div></template>
2.3 嵌套路由
一些应用程序的 UI 由多层嵌套的组件组成。在这种情况下,URL 的片段通常对应于特定的嵌套组件结构,例如:
/user/profile /user/posts
┌──────────────────┐ ┌──────────────────┐
│ User │ │ User │
│ ┌──────────────┐ │ │ ┌──────────────┐ │
│ │ Profile │ │ ●────────────▶ │ │ Posts │ │
│ │ │ │ │ │ │ │
│ └──────────────┘ │ │ └──────────────┘ │
└──────────────────┘ └──────────────────┘
在嵌套路由中,一级路由下面还有路由,例如一级路由为user,但是在user下面还有profile、posts等子路由等。
App.vue:
<template><div><h2>Welcome to App</h2><!-- 配置路由跳转 --><router-link to="/">Go to index</router-link><br><router-link to="/user">Go to user</router-link><hr><!-- 路由视图占位符 --><router-view /></div></template>
user.vue:
<template><div><h3>This is user</h3><router-link to="/user/profile">profile</router-link><br><router-link to="/user/posts">posts</router-link><hr><router-view></router-view></div></template>
定义路由表:
// 定义路由表
const routes = [...{path: '/user', component: () => import('../views/user.vue'),children: [// 这里一定要写相对路径{path: 'profile', component: () => import('../views/user/profile.vue')},{path: 'posts', component: () => import('../views/user/posts.vue')}]}...
]
效果如下:
2.4 路由跳转-useRouter
客户端路由的作用是在单页应用 (SPA) 中将浏览器的 URL 和用户看到的内容绑定起来。当用户在应用中浏览不同页面时,URL 会随之更新,但页面不需要从服务器重新加载。
Vue Router 基于 Vue 的组件系统构建,我们可以通过配置路由来告诉 Vue Router 为每个 URL 路径显示哪些组件。
另外,我们可以使用vue-router中的useRouter对象来进行编程式路由,即通过代码的方式我们也可以进行路由的跳转。
路由表如下:
// 定义路由表
const routes = [{path: '/index', component: index},{name: 'dept', path: '/dept', component: () => import('../components/test01/dept.vue')},{path: '/user/:id/:name/:age', component: () => import('../components/test01/user.vue')},// 对象传参一定要有name属性{name: "goods", path: '/goods/:id/:name/:price/:desc', component: () => import('../components/test01/goods.vue')},{path: '/article/:id', component: () => import('../components/test01/article.vue')}
]
App.vue:
<template><div><h2>Welcome to App</h2><router-link to="/index">Go to index</router-link><br><button @click="toArticle">路径传参-单个参数-article</button><button @click="toUser">路径传参-多个参数-user</button><button @click="toGoods">路径传参-对象传参-goods</button><button @click="toDept_01">查询参数-普通传参-dept</button><button @click="toDept_02">查询参数-对象传参-dept</button><!-- 路由视图占位符 --><router-view/></div></template><script setup>
// 导入useRouter
import { useRouter } from 'vue-router'
// 创建路由实例
let router = useRouter();function toArticle(){router.push("/article/100");
}function toUser(){router.push("/user/100/小灰/20");
}function toGoods(){router.push({name: 'goods',params: {id: 100,name: '小米10至尊纪念版',price: 5899.00,desc:'性能超级强悍'}});
}function toDept_01(){router.push("/dept?id=100&name=研发部");
}function toDept_02(){router.push({name: 'dept',query: {id: 200,name: '市场部'}});
}
</script>
使用Router也可以进行回退,例如我们在某个子组件中添加如下代码:
<script setup>
// 导入useRouter对象
import {useRouter} from "vue-router";// 获取router对象
let router = useRouter();
function goBack() {// go代表前进,back代表后退// go传递-1代表后退一页,back传递-1代表前进一页router.go(-1);// router.back();
}
</script><template><div><h3>article page</h3><button @click="goBack">back</button></div></template>
2.5 Vue导航守卫
导航守卫允许在路由发生前、发生时、发生后执行自定义函数以完成某些特定功能,类似于拦截器的功能。导航守卫主要用于权限控制、数据预加载、页面访问限制等场景。
路由函数一般存在以下三个参数:
- to:即将要进入的目标路由对象;
- from:即将要离开的路由对象;
- next:涉及到next参数的路由函数,必须调用next()方法来继续路由,否则路由会中断在这,不会继续往下执行。
next('/login'); # 跳转到/login请求
next({name:'login'}); # 跳转到login组件
next({path:'/login'}); # 跳转到/login请求
- next():进行管道中的下一个函数。如果全部函数执行完了,则导航的状态就是confirmed(确认的)。
- next( false ):中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到from路由对应的地址。
- next('/'):当前的导航被中断,跳转到一个新的地址。next方法中可以传递组件名称或要跳转的页面路径,例如:
2.5.1 全局守卫
全局守卫是指路由实例上直接操作的函数,特点是所有路由配置的组件都会触发,即触发路由就会触发这些函数。
- beforeEach(to,from, next):在路由跳转前触发,这个钩子作用主要是用于登录验证,也就是路由还没跳转提前告知。
- beforeResolve(to,from, next): 这个和beforeEach类似,也是路由跳转前触发,区别是该方法在导航被路由前但组件已经被解析后调用(所有组件内守卫和异步路由组件被解析之后)。即在 beforeEach 和 组件内beforeRouteEnter 之后,afterEach之前调用。
- afterEach(to,from) : 和beforeEach相反,它是在路由跳转完成后触发,它发生在beforeEach和beforeResolve之后,beforeRouteEnter(组件内守卫)之前。这些钩子不会接受next函数也不会改变导航本身。
在index.js中定义全局守卫:
// 定义全局前置导航守卫
router.beforeEach((to, from,next) => {console.log("守卫to:", to)console.log("守卫from:", from)// 如果访问的是dept请求则判断是否已经登录if(to.path === '/dept'){let isLogin = false; //假设登录成功if(isLogin){next(); //继续路由(相当于放行dept请求)}else{router.push('/login'); //没有登录则跳转到登录页面}}// 如果访问的不是dept请求则继续路由next();
})
在进行路由跳转将会执行该函数,输出如下:
2.5.2 路由守卫
路由守卫是指在单个路由配置的时候也可以设置的函数
- beforeEnter(to,from, next):和beforeEach完全相同,如果两个都设置了,beforeEnter则在beforeEach之后紧随执行。在路由配置上直接定义beforeEnter守卫。
例如给index路由添加路由守卫,这样每次在访问index组件时都会经过该路由守卫:
{path: '/index', component: index, beforeEnter: (to, from, next) => {console.log("beforeEnter-守卫to:", to)console.log("beforeEnter-守卫from:", from)next();}
}
2.5.3 组件内守卫
组件内守卫是指在组件内执行的函数,类似于组件内的生命周期,相当于为配置路由的组件添加的路由函数。
- beforeRouteEnter(to,from, next):进入组件前
- beforeRouteUpdadte(to,from, next):路由改变但组件复用时
- beforeRouteLeave(to,from, next):离开组件前
例如在index.vue页面中添加组件内守卫:
<script setup>function beforeRouteEnter(to, from, next) {console.log("beforeRouteEnter-守卫to:", to)console.log("beforeRouteEnter-守卫from:", from)next();
}</script><template><div><h3>This is index</h3></div></template><style scoped>
</style>
相关文章:
(11)Vue-Router路由的详细使用
本系列教程目录:Vue3Element Plus全套学习笔记-目录大纲 文章目录 第2章 路由 Vue-Router2.1 Vue路由快速入门2.1.1 创建项目2.1.2 路由运行流程 2.2 传递参数-useRoute2.2.1 路径参数-params1)普通传参2)传递多个参数3)对象方式传…...
RISCV的smstateen-ssstateen扩展
RISC-V 的 Smstateen / Ssstateen 扩展是为了解决安全性和资源隔离性问题而设计的,尤其是针对在多个上下文(如用户线程、多个虚拟机)之间 潜在的隐蔽信道(covert channel) 风险。 🌐 背景:隐蔽信道与上下文切换问题 当…...
C++ 与 Lua 联合编程
在软件开发的广阔天地里,不同编程语言各有所长。C 以其卓越的性能、强大的功能和对硬件的直接操控能力,在系统开发、游戏引擎、服务器等底层领域占据重要地位,但c编写的程序需要编译,这往往是一个耗时操作,特别对于大型…...
瑞萨 EZ-CUBE2 调试器
瑞萨 EZ-CUBE2 调试器 本文介绍了瑞萨 EZ-CUBE2 调试器的基本信息、调试方式、环境搭建、硬件连接、软件测试等。 包装展示 调试器展示 开关选项 详见:EZ-CUBE2 | Renesas 瑞萨电子 . 环境搭建 使用 Renesas 公司的 e2 studio 开发工具,下载 并安装该…...
MATLAB滤波工具箱演示——自定义维度、滤波方法的例程演示与绘图、数据输出
使用 M A T L A B MATLAB MATLAB的界面做了一个 M A T L A B MATLAB MATLAB滤波工具箱 d e m o demo demo,本文章给出演示:自定义维度、滤波方法的例程演示与绘图、数据输出 文章目录 编辑界面使用方法优势待改进点部分代码 编辑界面 使用 M A T L A B …...
数据库索引优化实战: 如何设计高效的数据库索引
数据库索引优化实战: 如何设计高效的数据库索引 一、理解数据库索引的核心原理 1.1 B树索引的结构特性 数据库索引(Database Index)的本质是通过特定数据结构加速数据检索。现代关系型数据库普遍采用B树(B Tree)作为默认索引结构&…...
TS 安装
TS较JS优势 1 TS静态类型编程语言。编译时发现错误 2 类型系统 强化变量类型概念 3 支持新语法 4 类型推断机制 可以和React框架中的各种hook配合 5 任何地方都有代码提示 tsc 命令 将TS转为JS 1 tsc 文件.ts 生成 js文件 2 执行JS代码...
CMake separate_arguments用法详解
separate_arguments 是 CMake 中用于将字符串分割成参数列表的命令,适用于处理包含空格的参数或复杂命令行参数。以下是其用法详解: 基本语法 separate_arguments(<variable> [UNIX|WINDOWS_COMMAND] [PROGRAM <program>] [ARGS <args&…...
【AI科技】AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模块化部署,可在 AMD Instinct GPU 上实现可扩展 AI
AMD ROCm 6.4 新功能:突破性推理、即插即用容器和模块化部署,可在 AMD Instinct GPU 上实现可扩展 AI 现代 AI 工作负载的规模和复杂性不断增长,而人们对性能和部署便捷性的期望也日益提升。对于在 AMD Instinct™ GPU 上构建 AI 和 HPC 未来…...
2025年- H20-Lc128-240. 搜索二维矩阵 II(矩阵)---java版
1.题目描述 2.思路 遍历矩阵,然后如果遇到矩阵中的值正好等于target,输出true。否则,输出false。 3.代码 public class H240 {public boolean searchMatrix(int[][] matrix, int target) {//1.计算出总的行值,总的列值。int mm…...
LearningFlow:大语言模型城市驾驶的自动化策略学习工作流程
《LearningFlow: Automated Policy Learning Workflow for Urban Driving with Large Language Models》2025年1月发表,来自香港科技大学广州分校的论文。 强化学习(RL)的最新进展表明了自动驾驶的巨大潜力。尽管有这一前景,但奖励…...
C语言数据类型与内存布局
C语言数据类型内存占用 类型32位系统64位系统格式说明符char1字节1字节%cint4字节4字节%dfloat4字节4字节%fdouble8字节8字节%lflong long8字节8字节%lld...
从原理到实战讲解回归算法!!!
哈喽,大家好,我是我不是小upper, 今天系统梳理了线性回归的核心知识,从模型的基本原理、参数估计方法,到模型评估指标与实际应用场景,帮助大家深入理解这一经典的机器学习算法,助力数据分析与预测工作。 …...
linux指令中的竖线(“|”)是干啥的?【含实例展示】
文章目录 一、管道符的基本概念二、管道符的核心作用三、常用实例展示四、进阶技巧五、注意事项总结 实操展示**案例1:统计日志中特定错误的数量****案例2:查找当前运行的进程****案例3:合并排序并去重****案例4:实时监控CPU占用前…...
[HOT 100] 0124. 二叉树中的最大路径和
文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 124. 二叉树中的最大路径和 - 力扣(LeetCode) 2. 题目描述 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一…...
[SoC]AXI总线Performance验证方案
AXI总线Performance验证方案 测试 AXI (Advanced eXtensible Interface) 的性能是 SoC 验证中的重要任务,旨在评估其在不同负载和配置下的表现是否满足设计要求。以下详细说明如何测试 AXI 的性能、需要统计的变量、计算方法、在验证环境中动态计算性能的方法,以及如何…...
EMC PowerStore存储学习之一NVMe磁盘的命名规则
PowerStore的日志中经常会看到类似于/dev/nvme1n1的磁盘,在svc_diag list --show_drives中也可以看到类似这样的输出,如下图: 这里的Drives的显示都是 /dev/nvmeXnY的形式,那么这个磁盘命名规则怎么解读呢? 在Linux系…...
apt-mirror搭建ubuntu本地离线源
参考资料 4 Steps to Setup Local Repository in Ubuntu using APT-mirror 使用 APT-mirror 四步配置 Ubuntu 本地软件仓库 ubuntu下的apt-get内网本地源的搭建...
【记录】新Ubuntu20配置voxelmap的环境安装
因为系统总出问题,仅用于个人纪录。 1. 升级CMake到3.28及以上版本(Sophus依赖) wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3-linux-x86_64.sh chmod x cmake-3.28.3-linux-x86_64.sh sudo ./cmake-3.2…...
Python全流程开发实战:基于IMAP协议安全下载个人Gmail邮箱内所有PDF附件
在日常办公场景中,面对成百上千封携带PDF附件的邮件,手动逐一下载往往耗时耗力,成为效率瓶颈。如何通过代码实现“一键批量下载”?本文将以**“Gmail全量PDF附件下载工具”**开发为例,完整拆解从需求分析到落地交付的P…...
CPU:AMD的线程撕裂者(Threadripper)和霄龙(EPYC)的区别
AMD的**线程撕裂者(Threadripper)和霄龙(EPYC)**虽然都是面向高性能市场的处理器,但它们在定位、功能和技术规格上有显著区别。以下是两者的主要差异: 1. 目标市场 线程撕裂者(Threadripper&…...
【五一培训】Day 2
注: 1. 本次培训内容的记录将以“Topic”的方式来呈现,用于记录个人对知识点的理解。 2. 由于培训期间,作者受限于一些现实条件,本文的排版及图片等相关优化,需要过一段时间才能完成。 3. 关于老板点评的一些思考 你…...
shell_plus
python manage.py shell_plus 是由 django-extensions 提供的一个增强版的 Django shell,它自动导入你的所有模型和其他一些便捷功能,使得交互式开发更加方便。 如果你遇到配置或运行问题,特别是与 RQ_SHOW_ADMIN_LINK 相关的 ImproperlyCon…...
基于C++、JsonCpp、Muduo库实现的分布式RPC通信框架
⭐️个人主页:小羊 ⭐️所属专栏:RPC框架 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 项目介绍JsonCpp库简单介绍Muduo库简单介绍C11异步操作——std::future1. 使用 std::async 关联异步任务2. std::packaged_task…...
Redis TLS 加密对性能的影响分析
Redis TLS 加密对性能的影响分析 是的,Redis 启用 TLS 加密确实会对性能产生一定影响,但影响程度取决于多种因素。以下是详细分析: 一、性能影响的主要来源 加密/解密开销: TLS 握手过程中的非对称加密(如 RSA、…...
树与二叉树完全解析:从基础到应用
目录 一、树形结构的基础认知 1.1 树的定义与特点 1.2 核心术语解析 二、二叉树的深度解析 2.1 二叉树定义 2.2 特殊二叉树类型 2.3 重要性质总结 三、二叉树的存储与遍历 3.1 存储方式对比 3.2 遍历算法精讲 四、经典题型训练 4.1 相同树判断(LeetCode…...
PostgreSQL:pgJDBC 下载和安装
PostgreSQL 的 pgJDBC 是用于 Java 程序连接和操作 PostgreSQL 数据库的 JDBC 驱动程序。 PostgreSQL:pgJDBC v42.7 下载和安装 点击【Application Stack Builder】 安装目录: 运行 cmd cd D:\PostgreSQL\pgJDBC copy postgresql-42.7.2.jar D:\groovy-…...
正则表达式与文本三剑客grep、sed、awk
目录 一、正则表达式 1.1、字符匹配 1.2、次数匹配 1.3、位置锚定 1.4、分组或其他 二、扩展正则表达式 三、grep 四、awk 4.1、常用命令选项 4.2、工作原理 4.3、基础用法 4.4、内置变量 4.5、模式 4.6、条件判断 4.7、awk中的循环语句 4.8、数组 4.9、脚本 …...
(35)VTK C++开发示例 ---将图片映射到平面2
文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 与上一个示例不同的是,使用vtkImageReader2Factory根据文件扩展名或内容自动创建对应的图像文件读取器&a…...
每日一题洛谷P8635 [蓝桥杯 2016 省 AB] 四平方和c++
P8635 [蓝桥杯 2016 省 AB] 四平方和 - 洛谷 (luogu.com.cn) 直接暴力枚举,不做任何优化的话最后会TLE一个,稍微优化一下就过了(数据给的还是太良心了) 优化:每层循环用if判断一下,如果大于n就直接跳 当然…...
【python】【UV】一篇文章学完新一代 Python 环境与包管理器使用指南
🐍 UV:新一代 Python 环境与包管理器使用指南 一、UV 是什么? UV 是由 Astral 团队开发的高性能 Python 环境管理器,旨在统一替代 pyenv、pip、venv、pip-tools、pipenv 等工具。 1.1 UV 的主要功能 🚀 极速包安装&…...
6.10.单源最短路径问题-Dijkstra算法
一.BFS算法的局限性: 如上图,BFS算法可以解决无权图的单源最短路径问题, 如果是解决带权图的单源最短路径问题,BFS算法就不适用了,如下图: 如上图,比如求G港到其他顶点的最短路径, …...
Python基于深度学习的网络舆情分析系统(附源码,部署)
大家好,我是Python徐师兄,一个有着7年大厂经验的程序员,也是一名热衷于分享干货的技术爱好者。平时我在 CSDN、掘金、华为云、阿里云和 InfoQ 等平台分享我的心得体会。 🍅文末获取源码联系🍅 2025年最全的计算机软件毕…...
mysql--索引
索引作为一种数据结构,其用途是用于提升检索数据的效率。 分类 普通索引(INDEX):索引列值可重复 唯一索引(UNIQUE):索引列值必须唯一,可以为NULL 主键索引(PRIMARY KEY&a…...
【算法题】荷兰国旗问题[力扣75题颜色分类] - JAVA
一、题目 二、文字解释 1.1 前言 本题是经典的「荷兰国旗问题」,由计算机科学家 Edsger W. Dijkstra 首先提出。如同图中所示的荷兰国旗,其由红、白、蓝三色水平排列组成。在算法领域,该问题可类比为将一个由特定的三种元素(可…...
【数据结构】堆的完整实现
堆的完整实现 堆的完整实现GitHub地址前言堆的核心功能实现重温堆的定义堆结构定义1. 堆初始化与销毁2. 元素交换函数3. 堆化操作向上调整(子→父)向下调整(父→子) 4. 堆元素插入5. 堆元素删除6. 辅助功能函数堆的判空获取堆顶元…...
软考 系统架构设计师系列知识点之杂项集萃(51)
接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(50) 第80题 设三个煤场A1、A2、A3分别能供应煤7、12、11万吨,三个工厂B1、B2、B3分别需要10、10、10万吨,从各煤场到各工厂运煤的单价(百元/吨&…...
patch命令在代码管理中的应用
patch 是一个用于将差异文件(补丁)应用到源代码的工具,常用于修复 bug、添加功能或调整代码结构。在您提供的代码中,patch 命令通过一系列补丁文件(.patch)修改了 open-amp 库的源代码。 patch 命令的核心作…...
Qt结构体运算符重载指南
在 Qt 中,结构体(struct)或类(class)中重载运算符是一种常见的做法,用于实现自定义类型的逻辑操作(如比较、算术运算等)。以下是一些常见的运算符重载示例和注意事项: 1.…...
基于bert预训练模型的垃圾短信分类系统
文章目录 任务介绍数据说明注意事项数据处理数据准备数据集划分数据集类构建模型构建与训练模型构建模型训练模型推理附录任务介绍 随着移动通信技术的飞速发展,短信(Short Message Service, SMS)已成为人们日常生活中不可或缺的沟通方式之一。然而,垃圾短信(Spam SMS)的…...
[Android] 网易爆米花TV 2.0.0.0429(原网易Filmly,支持多网盘的TV版、电脑版带海报墙播放器)
[Android] 网易爆米花 链接:https://pan.xunlei.com/s/VOPDuQS9D7qixvAnoy7-he2PA1?pwdhzvh# [Android] 网易爆米花TV 2.0.0.0429(原网易Filmly,支持多网盘的TV版、电脑版带海报墙播放器) 详细介绍直接上主页截图,…...
# 前后端分离象棋对战项目开发记录
1. **结构清晰**:使用更直观的标题、分段和列表,增强可读性。 2. **视觉美观**:添加Markdown格式化(如代码块、加粗、斜体),并建议配色和排版风格。 3. **内容精炼**:精简冗余表述,突…...
Android Framework学习二:Activity创建及View绘制流程
文章目录 Window绘制流程Window Manager Service(WMS)SurfaceSurfaceFlinger 安卓View层次结构ActivityPhoneWindowActivity与PhoneWindow两者之间的关系ViewRootImplDecorViewDecorView 的作用DecorView 的结构总结 Activity创建流程View invalidate调用…...
文章五《卷积神经网络(CNN)与图像处理》
文章5:卷积神经网络(CNN)与图像处理——让AI学会"看图说话" 引言:你的AI宠物如何认出猫狗? 想象你的手机突然有了"眼睛",不仅能识别照片里的猫狗,还能告诉你它们的品种&am…...
Ubuntu系统下Firefox浏览器完整指南:故障修复、国内版安装与下载加速
Ubuntu系统下Firefox浏览器完整指南:故障修复、国内版安装与下载加速 一、Firefox无法启动问题修复二、替换国际版安装国内版完整流程准备工作操作步骤验证要点 三、下载延迟问题解决方案现象分析优化配置步骤注意事项 四、进阶技巧补充五、常见问题FAQ 一、Firefox…...
【论文阅读一】掌握高效阅读法,开启学术研究新旅程:S. Keshav教授论文阅读的三遍法
文章目录 一、三遍阅读法1. 初读:10分钟:宏观把握,快速筛选2. 第二遍:1个小时:更仔细的阅读,了解文中论点3. 第三遍:深入理解,注重细节,挑战假设 二、运用三遍阅读法进行…...
多线程编程的常见问题
目录 1. 线程安全和可重入函数问题 2. 死锁的理解 2.1 死锁的概念 2.2 死锁的四个必要条件 3. C中STL容器的线程安全问题 4. C中智能指针的线程安全问题 1. 线程安全和可重入函数问题 线程安全:线程安全是指在多线程环境下,一个函数或者一段代码可…...
算法篇(九)【滑动窗口】
如果在分析一道算法题的时候,发现使用的两个 ”双指针“ , 都是同向的 , 不回退的 , 且一直都在维护 “一段连续的区间” , 此时我们可以考虑使用 “滑动窗口” ! 一、长度最小的子数组 209. 长度最小的子…...
【AI面试准备】传统测试工程师Prompt Engineering转型指南
介绍技能转型:传统测试工程师需掌握Prompt Engineering优化AI输出。如何快速掌握,以及在实际工作中如何运用。 传统测试工程师向AI时代的技能转型,掌握Prompt Engineering(提示工程)已成为提升工作效率、适应智能化测…...
数字智慧方案6186丨智慧应急指挥解决方案(43页PPT)(文末有下载方式)
资料解读:智慧应急指挥解决方案 详细资料请看本解读文章的最后内容。 在当今社会,各类突发事件频发,应急管理工作面临着巨大挑战。智慧应急指挥解决方案应运而生,旨在提升应急管理的效率和水平,保障人民生命财产安全。…...