当前位置: 首页 > news >正文

【vuejs】vue-router 之 addRoute 动态路由的应用总结

1. Vue Router 概述

Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用。它与 Vue.js 深度集成,让开发者能够轻松地构建具有复杂用户界面的单页面应用。Vue Router 允许你定义不同的路由,并通过 router-view 组件在应用中显示匹配的组件。

Vue Router 的核心特性包括:

  • 嵌套路由,允许你创建模块化的、嵌套的视图。
  • 动态路由,可以基于参数动态生成路由。
  • 路由参数、查询和通配符,提供灵活的路由定义。
  • 视图之间的过渡效果,利用 Vue 的过渡系统。
  • 导航守卫,可以在路由跳转前后执行逻辑。
  • 带有自动激活的 CSS class 的链接
  • 支持 HTML5 History 模式和 Hash 模式,在 IE9 中自动降级。
  • 自定义的滚动条行为

Vue Router 的安装和基本使用步骤如下:

1.1 安装 Vue Router

对于 Vue 2,推荐使用 Vue Router 3.x 版本。可以通过 npm 或 yarn 进行安装:

npm install vue-router@3
# 或者
yarn add vue-router@3

1.2 项目中引入 Vue Router

在项目的入口文件(如 main.js 或 main.ts)中引入并使用 Vue Router:

import Vue from 'vue';
import VueRouter from 'vue-router';
import App from './App.vue';
import routes from './router'; // 引入路由配置Vue.use(VueRouter);const router = new VueRouter({mode: 'history',routes // 定义的路由数组
});new Vue({router,render: h => h(App)
}).$mount('#app');

1.3 定义路由

在路由配置文件(如 router/index.js)中定义应用的路由:

const routes = [{path: '/',component: Home},{path: '/about',component: About}
];export default routes;

1.4 使用 router-view 和 router-link

在应用的组件中使用 router-view 来显示当前路由匹配的组件,使用 router-link 来创建导航链接:

<template><div id="app"><router-link to="/" exact>Home</router-link><router-link to="/about">About</router-link><router-view></router-view></div>
</template>

以上就是 Vue Router 在 Vue 2 项目中的概述和基本使用方法。通过这些步骤,你可以开始构建具有路由功能的单页面应用。

2. 动态路由概念

动态路由允许你在运行时根据不同的条件添加或删除路由。这种灵活性对于构建复杂的单页应用尤为重要,尤其是在需要根据不同用户角色或权限动态显示或隐藏路由的情况下。

2.1 动态路由的实现方式

在Vue Router中,动态路由的实现主要依赖于router.addRoute方法。此方法可以在应用运行时向路由配置中添加新的路由规则。

// 假设有一个Vue Router实例router
router.addRoute('newRoute', {path: '/new-path',component: () => import('./NewComponent.vue'),meta: {requiresAuth: true}
});

2.2 动态路由的应用场景

动态路由在以下场景中非常有用:

  • 用户权限管理:根据不同的用户权限动态显示或隐藏路由。
  • 模块懒加载:按需加载页面组件,减少初始加载时间。
  • 条件路由:根据页面间的逻辑关系或用户操作结果动态添加路由。

2.3 注意事项

使用动态路由时,需要注意以下几点:

  • 全局路由守卫:在使用router.addRoute添加路由后,可能需要更新全局路由守卫以处理新路由的导航。
  • 命名视图:如果添加的路由使用了命名视图,确保在全局路由配置中正确引用。
  • 组件重用:动态路由可能会涉及到组件的重复使用,确保组件能够处理重复渲染的情况。

使用动态路由可以提高应用的灵活性和可维护性,但同时也需要仔细设计以避免潜在的复杂性和错误。

3. 使用 addRoute 方法

3.1 动态添加路由的基本概念

动态添加路由是 Vue Router 提供的一项功能,允许开发者在运行时根据条件向路由配置中添加新的路由规则。这在某些场景下非常有用,例如基于用户角色动态显示或隐藏某些页面路由。

3.2 addRoute 方法的使用场景

  • 用户权限管理:根据不同用户的权限动态添加或隐藏路由。
  • 模块懒加载:按需加载页面组件,减少初始加载时间。
  • 条件路由:某些特定条件下才显示的页面,如设置页面仅对管理员用户可见。

3.3 addRoute 方法的基本用法

在 Vue Router 的实例上,可以使用 addRoute 方法来动态添加路由。以下是一个基本的示例:

// 假设 router 是 Vue Router 的实例
router.addRoute('parentRoute', // 父路由的名称,如果该路由不存在,将创建一个新的路由{path: 'child', // 子路由的路径component: ChildComponent, // 子路由对应的组件name: 'ChildRouteName' // 子路由的名称}
);

3.4 动态路由的注意事项

  • 避免重复添加:在调用 addRoute 之前,应检查路由是否已存在,避免重复添加相同的路由。
  • 路由嵌套:动态添加的路由可以是嵌套路由,需要正确设置 children 属性。
  • 全局与局部路由:了解何时使用全局路由 (router.addRoute) 与局部路由 (router.addRoutes)。

3.5 动态路由的高级应用

  • 程序逻辑控制:根据程序的运行逻辑动态添加路由,如根据用户的操作或应用的状态。
  • 异步组件:动态路由可以与异步组件结合使用,实现按需加载。
  • 路由守卫:使用路由守卫对动态添加的路由进行权限验证或其他逻辑处理。

3.6 实践中的动态路由示例

假设有一个基于用户角色显示不同页面的应用,以下是如何根据用户角色动态添加路由的示例:

// 假设根据用户角色获取可访问的路由列表
const accessibleRoutes = getUserAccessibleRoutes(userRole);// 遍历并添加路由
accessibleRoutes.forEach(route => {router.addRoute('parentRoute', {path: route.path,component: route.component,name: route.name});
});

在这个示例中,getUserAccessibleRoutes 函数根据用户的角色返回一个路由配置数组,然后使用 forEach 循环动态添加到 Vue Router 实例中。这种方法可以灵活地控制不同用户可访问的页面。

4. 导航守卫中添加路由

在 Vue 2 中使用 vue-router 时,导航守卫是一个强大的功能,它允许我们在路由跳转前后执行代码,从而实现路由的动态添加。以下是如何在导航守卫中添加路由的详细步骤:

4.1 使用 beforeEach 守卫添加路由

beforeEach 是全局前置守卫,可以在每次路由跳转之前触发。我们可以在这个守卫中添加新的路由规则:

router.beforeEach((to, from, next) => {// 判断是否需要添加新路由if (shouldAddRoute(to)) {// 动态添加路由router.addRoute('newRoute', {path: '/new-path',component: () => import('./components/NewComponent.vue')});}// 确保调用 next() 以继续导航next();
});

4.2 使用 beforeEnter 守卫添加路由

如果只想在访问特定路由前添加路由,可以使用 beforeEnter 守卫。这个守卫在路由的组件被渲染之前调用:

const router = new VueRouter({routes: [{path: '/specific-path',component: SpecificComponent,beforeEnter: (to, from, next) => {// 添加路由逻辑router.addRoute('newRoute', {path: '/new-specific-path',component: () => import('./components/AnotherComponent.vue')});next(); // 继续导航到目标路由}}]
});

4.3 考虑导航守卫的异步性

由于路由组件可能是异步加载的,所以在导航守卫中添加路由时,需要确保新添加的路由组件已经加载完成。可以使用 getComponent 方法来获取组件:

router.addRoute('newAsyncRoute', {path: '/new-async-path',component: (resolve) => {require(['./components/AsyncComponent.vue'], resolve);}
});

4.4 处理路由添加后的导航

在导航守卫中添加路由后,如果立即导航到新添加的路由,需要使用 next 函数的参数来指定新路由:

router.beforeEach((to, from, next) => {// 添加路由逻辑router.addRoute('newRoute', {path: '/new-path',component: NewComponent});// 如果目标路由是新添加的路由,则直接导航到新路由if (to.path === '/new-path') {next({ ...to, name: 'newRoute' });} else {next();}
});

这种方式可以确保在添加路由后,如果用户尝试导航到新路由,能够正确地进行导航。

5. 删除路由

在Vue 2和vue-router中,删除路由是一个重要的操作,尤其是在单页面应用(SPA)中,当应用的某些页面或组件不再需要时,合理地删除路由可以优化应用结构和性能。

5.1 删除路由的步骤

删除路由通常涉及以下步骤:

  1. 定位路由配置:首先需要在路由配置文件中找到需要删除的路由定义。
  2. 移除路由定义:从路由配置对象中移除对应的路由定义。
  3. 更新视图组件:如果路由配置与特定的视图组件相关联,需要确保对应的组件不再被引用。
  4. 测试:删除路由后,进行充分的测试以确保应用的其他部分没有受到影响。

5.2 动态删除路由

在某些情况下,可能需要在运行时动态地添加或删除路由。这可以通过编程方式操作vue-router的routes属性来实现:

// 假设router是已经创建的VueRouter实例
// 找到需要删除的路由的索引
const routeIndex = router.options.routes.findIndex(route => route.path === '/path-to-be-removed');// 从路由配置中删除路由
if (routeIndex > -1) {router.options.routes.splice(routeIndex, 1);
}

5.3 注意事项

  • 路由守卫:如果删除的路由配置了路由守卫,需要确保相应的守卫逻辑也被清理。
  • 命名视图:如果使用了命名视图,删除路由时也要确保命名引用不会指向不存在的路由。
  • 重定向和别名:如果路由配置了重定向或别名,删除时也要相应地进行更新。

5.4 影响分析

删除路由可能会对应用的导航和用户操作产生影响。例如:

  • 导航链接:所有指向已删除路由的导航链接将不再有效,需要更新为新的路由路径。
  • 用户状态:如果用户在删除的路由页面上进行了操作或输入了数据,需要考虑如何保存或迁移这些状态。
  • SEO:对于依赖于路由的SEO策略,删除路由可能需要重新评估和调整。

通过上述步骤和注意事项,可以确保在Vue 2和vue-router中安全、有效地删除路由,同时维护应用的稳定性和用户体验。

6. 查看现有路由

6.1 路由配置概览

在Vue 2项目中使用vue-router,首先需要查看现有的路由配置,这通常在路由配置文件中完成,例如router/index.js

6.1.1 路由配置文件

路由配置文件是所有路由规则的集合点,包含了定义路由的路径、名称、组件等信息。

import Vue from 'vue';
import VueRouter from 'vue-router';Vue.use(VueRouter);const routes = [// 这里是具体的路由配置
];const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes
});export default router;

6.1.2 路由对象属性

每个路由对象通常包含以下属性:

  • path:路由的路径,必须以/开头。
  • name:路由的名称,用于<router-link>和编程式导航。
  • component:该路由应该渲染的组件。
  • children:嵌套路由的数组。

6.2 现有路由的查看方法

6.2.1 访问路由实例

在Vue组件中,可以通过this.$router访问路由实例,进而查看现有路由。

this.$router.options.routes.forEach((route) => {console.log(route.path, route.name);
});

6.2.2 使用router.match方法

router.match方法可以根据给定的路径返回对应的路由记录。

const matchedRoute = this.$router.match('/some-path');
console.log(matchedRoute);

6.3 动态路由配置

6.3.1 动态添加路由

在某些情况下,可能需要动态添加路由。可以通过router.addRoute方法实现。

router.addRoute({path: '/new-path',name: 'NewRoute',component: () => import('@/components/NewComponent.vue')
});

6.3.2 注意事项

  • 确保在Vue实例创建之后添加路由。
  • 动态添加的路由组件需要使用函数形式进行导入,以支持异步加载。

6.4 路由守卫

查看现有路由时,也应关注路由守卫的使用情况,它们可以控制路由的跳转逻辑。

router.beforeEach((to, from, next) => {// 路由守卫逻辑next();
});

路由守卫可以在全局级别或单个路由级别设置,用于执行权限验证、页面跳转控制等操作。

7. 实践中的注意事项

在使用 Vue 2 和 vue-router 进行单页面应用开发时,有几个关键的注意事项需要遵循,以确保应用的稳定性和维护性。

7.1 路由的动态添加与删除

动态添加路由可以提供更多的灵活性,但同时也增加了管理的复杂性。需要确保动态路由的添加和删除不会影响已有的路由结构。

  • 动态路由管理:使用 router.addRouterouter.removeRoute 方法来动态添加和删除路由。这可以在应用运行时根据条件或用户行为来调整路由结构。

7.2 路由守卫的使用

路由守卫是 Vue Router 的一个强大特性,可以在路由跳转前后执行额外的逻辑。

  • 守卫类型:了解全局守卫(beforeEachafterEach)、路由独享守卫(beforeEnter)和组件内守卫(beforeRouteEnterbeforeRouteUpdatebeforeRouteLeave)的不同使用场景和限制。

7.3 路由参数和查询的传递

在路由之间传递参数和查询是常见的需求,需要正确处理参数的解析和传递。

  • 参数传递:使用 $route.params$route.query 来访问路由参数和查询字符串,确保在组件中正确地处理这些数据。

7.4 嵌套路由的管理

嵌套路由可以构建复杂的页面结构,但也需要仔细设计以避免混乱。

  • 嵌套结构:合理规划嵌套路由的层级和命名,使用 <router-view> 组件来实现视图的嵌套。

7.5 路由的重定向

重定向是控制路由跳转的另一种方式,可以用于页面的重构或优化用户体验。

  • 重定向规则:使用 redirect 属性在路由配置中定义重定向规则,如将旧的路由路径重定向到新的路径。

7.6 路由的命名和路径设计

良好的路由命名和路径设计可以提高代码的可读性和可维护性。

  • 命名规范:遵循一致的命名规范,使用简洁且语义化的路由名称,避免使用模糊或重复的名称。

7.7 懒加载的实现

在大型应用中,路由组件的懒加载可以提高应用的加载速度和性能。

  • 懒加载技术:利用 import() 函数或 Vue.component 的动态导入方式来实现路由组件的懒加载。

7.8 路由的模式选择

Vue Router 支持两种路由模式:hash 模式和 history 模式,根据应用的部署和需求选择合适的模式。

  • 模式选择:了解两种模式的区别和适用场景,根据应用的 URL 风格和后端配置选择最合适的路由模式。

7.9 404 页面的处理

为应用提供一个友好的 404 页面可以提升用户体验。

  • 404 路由:配置一个捕获所有未匹配路由的 404 页面,使用 <router-view> 来展示这个页面。

7.10 保持路由的更新和兼容性

随着 Vue 和 Vue Router 的更新,需要定期检查并更新路由相关的代码以保持兼容性。

  • 兼容性检查:在升级 Vue 或 Vue Router 版本时,检查路由配置和代码是否需要相应的更新或修改。

如果这篇文章对你有所帮助,欢迎点赞、分享和留言,让更多的人受益。感谢你的细心阅读,如果你发现了任何错误或需要补充的地方,请随时告诉我,我会尽快处理。

相关文章:

【vuejs】vue-router 之 addRoute 动态路由的应用总结

1. Vue Router 概述 Vue Router 是 Vue.js 官方的路由管理器&#xff0c;用于构建单页面应用。它与 Vue.js 深度集成&#xff0c;让开发者能够轻松地构建具有复杂用户界面的单页面应用。Vue Router 允许你定义不同的路由&#xff0c;并通过 router-view 组件在应用中显示匹配的…...

LeetCode 30. 串联所有单词的子串

LeetCode 30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words [“ab”,“cd”,“ef”]&#xff0c; 那么 “abcd…...

python本学期所有代码!

第一单元 ----------------------------------------------------------------------- #圆面积的计算 radius 25 area 3.1415 * radius * radius print(area) print("{:.2f}".format(area)) --------------------------------------------------------------------…...

武汉星起航:无锡跨境电商加速“出海”,物流升级助品牌全球布局

随着全球化的不断深入&#xff0c;跨境电商作为数字外贸的新业态&#xff0c;正逐渐成为无锡企业拓展海外市场的重要渠道。武汉星起航关注到&#xff0c;近年来&#xff0c;无锡市通过积极推进国际物流枢纽建设&#xff0c;完善海外仓布局&#xff0c;以及各特色产业带的积极参…...

Python+Pytest+Allure+Yaml+Pymysql+Jenkins+GitLab接口自动化测试框架详解

PythonPytestAllureYaml接口自动化测试框架详解 编撰人&#xff1a;CesareCheung 更新时间&#xff1a;2024.06.20 一、技术栈 PythonPytestAllureYamlJenkinsGitLab 版本要求&#xff1a;Python3.7.0,Pytest7.4.4,Allure2.18.1,PyYaml6.0 二、环境配置 安装python3.7&…...

stm32-hal库(5)--usart串口通信三种模式(主从通信)(关于通信失败和串口不断发送数据问题的解决)

问题&#xff1a; 最近发现&#xff0c;stm32cubemx最新版本f1系列的hal库&#xff08;1.85版本&#xff09;生成的hal库&#xff0c;其中stm32f1xx_hal_uart.c的库文件中&#xff0c;其串口发送接收存在一些问题&#xff1a; 1.没有使用 __HAL_LOCK 和 __HAL_UNLOCK 宏&…...

一文学会LVS:概念、架构、原理、搭建过程、常用命令及实战案例

引言 随着互联网技术的飞速发展&#xff0c;服务器负载均衡技术变得越来越重要。LVS&#xff08;Linux Virtual Server&#xff09;作为一种高效的负载均衡解决方案&#xff0c;广泛应用于各大企业的生产环境中。本文将深入探讨LVS的概念、架构、工作原理&#xff0c;详细讲解其…...

[Go 微服务] Kratos 使用的简单总结

文章目录 1.Kratos 简介2.传输协议3.日志4.错误处理5.配置管理6.wire 1.Kratos 简介 Kratos并不绑定于特定的基础设施&#xff0c;不限定于某种注册中心&#xff0c;或数据库ORM等&#xff0c;所以您可以十分轻松地将任意库集成进项目里&#xff0c;与Kratos共同运作。 API -&…...

【unity实战】使用旧输入系统Input Manager 写一个 2D 平台游戏玩家控制器——包括移动、跳跃、滑墙、蹬墙跳

最终效果 文章目录 最终效果素材下载人物环境 简单绘制环境角色移动跳跃视差和摄像机跟随效果奔跑动画切换跳跃动画&#xff0c;跳跃次数限制角色添加2d物理材质&#xff0c;防止角色粘在墙上如果角色移动时背景出现黑线条方法一方法二 墙壁滑行实现角色滑墙不可以通过移动离开…...

【实战】EasyExcel实现百万级数据导入导出

文章目录 前言技术积累实战演示实现思路模拟代码测试结果 前言 最近接到一个百万级excel数据导入导出的需求&#xff0c;大概就是我们在进行公众号API群发的时候&#xff0c;需要支持500w以上的openid进行群发&#xff0c;并且可以提供发送openid数据的导出功能。可能有的同学…...

Graalvm配置文件与Feature和Substitute机制介绍

GraalVM介绍 GraalVM提前将Java应用程序编译成独立与机器码二进制文件&#xff08;可执行文件、动态库文件&#xff09;,如windows系统中的exe文件和dll文件。与在Java虚拟机&#xff08;JVM&#xff09;上运行的应用程序相比&#xff0c;这些二进制文件更小&#xff0c;启动速…...

Appium adb 获取appActivity

方法一&#xff08;最简单有效的方法&#xff09; 通过cmd命令&#xff0c;前提是先打开手机中你要获取包名的APP adb devices -l 获取连接设备详细信息 adb shell dumpsys activity | grep mFocusedActivity 有时获取到的不是真实的Activity 方法二 adb shell monkey -p …...

调整分区失败致盘无法访问:深度解析与数据恢复全攻略

调整分区失败盘打不开的困境 在计算机的日常维护与管理中&#xff0c;调整磁盘分区是常见的操作之一&#xff0c;旨在优化存储空间布局、提升系统性能或满足特定应用需求。然而&#xff0c;当这一操作未能如预期般顺利进行&#xff0c;反而导致分区调整失败&#xff0c;进而使…...

试用笔记之-汇通计算机等级考试软件一级Windows

首先下载汇通计算机等级考试软件一级Windows http://www.htsoft.com.cn/download/htwork.rar...

Java的NIO体系

目录 NIO1、操作系统级别下的IO模型有哪些&#xff1f;2、Java语言下的IO模型有哪些&#xff1f;3、Java的NIO应用场景&#xff1f;相比于IO的优势在哪&#xff1f;4、Java的IO、NIO、AIO 操作文件读写5、NIO的核心类 :Buffer&#xff08;缓冲区&#xff09;、Channel&#xff…...

自下而上的选股与自上而下的选股

一起学习了《战胜华尔街》&#xff0c;不知道大家有没有这么一种感受&#xff1a;林奇的选股方法是典型的自下而上的选股方法。虽然这一点没有单独拎出来讨论过&#xff0c;但在《从低迷中寻找卓越》《如何通过财务指标筛选股票&#xff1f;》《边逛街边选股&#xff1f;》《好…...

Tech Talk:智能电视eMMC存储的五问五答

智能电视作为搭载操作系统的综合影音载体&#xff0c;以稳步扩大的市场规模走入越来越多的家庭&#xff0c;成为人们生活娱乐的重要组成部分。存储部件是智能电视不可或缺的组成部分&#xff0c;用于保存操作系统、应用程序、多媒体文件和用户数据等信息。智能电视使用eMMC作为…...

scikit-learn教程

scikit-learn&#xff08;通常简称为sklearn&#xff09;是Python中最受欢迎的机器学习库之一&#xff0c;它提供了各种监督和非监督学习算法的实现。下面是一个基本的教程&#xff0c;涵盖如何使用sklearn进行数据预处理、模型训练和评估。 1. 安装和导入包 首先确保安装了…...

CentOS 7 搭建rsyslog日志服务器

CentOS 7 搭建rsyslog日志服务器 前言一、IP地址及主机名称规划1.修改主机名 二、配置rsyslog日志服务器1.安装rsyslog服务2.编辑/etc/rsyslog.conf 文件3.启动并启用rsyslog服务4.验证端口是否侦听 三、在rsyslog日志服务器上配置firewalld防火墙四、配置rsyslog日志客户端1.编…...

使用Spring Boot Actuator监控应用健康状态

使用Spring Boot Actuator监控应用健康状态 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何利用Spring Boot Actuator来监控和管理应用程序的…...

leetcode刷题:vector刷题

​ ​ &#x1f525;个人主页&#xff1a;guoguoqiang. &#x1f525;专栏&#xff1a;leetcode刷题 1.只出现一次的数字 这道题很简单&#xff0c;我们只需要遍历一次数组即可通过异或运算实现。(一个数与自身异或结果为0&#xff0c;任何数与0异或还是它本身) class Solut…...

CGI面试题及参考答案

什么是CGI?它在Web服务器与应用程序之间扮演什么角色? CGI(Common Gateway Interface) 是一种标准协议,它定义了Web服务器与运行在服务器上的外部程序(通常是脚本或应用程序)之间的通信方式。简单来说,CGI充当了一个桥梁,使得Web服务器能够将用户的请求传递给后端程序…...

论文调研_物联网漏洞检测综述

A Review of IoT Firmware Vulnerabilities and Auditing Techniques 研究背景&#xff1a;物联网设备在工业、消费类等各个领域得到了广泛应用&#xff0c;实现了更高的自动化和生产率。然而&#xff0c;这些连网设备的高度依赖也带来了一系列网络安全威胁&#xff0c;特别是…...

Java学习【IO流:深入理解与应用(上)】

Java学习【IO流&#xff1a;深入理解与应用&#xff08;上&#xff09;】 &#x1f343;1.IO流体系结构&#x1f343;2.FileOutputStream&#x1f341;2.1FileOutputStream写数据的三种方式&#x1f341;2.2换行和续写 &#x1f343;3.FileInputStream&#x1f341;3.1每次读取…...

干货系列:SpringBoot3第三方接口调用10种方式

环境&#xff1a;SpringBoot.3.3.0 1、简介 在项目中调用第三方接口是日常开发中非常常见的。调用方式的选择通常遵循公司既定的技术栈和架构规范&#xff0c;以确保项目的一致性和可维护性。无论是RESTful API调用、Feign声明式HTTP客户端、Apache HttpClient等调用方式&…...

KVM性能优化之CPU优化

1、查看kvm虚拟机vCPU的QEMU线程 ps -eLo ruser,pid,ppid,lwp,psr,args |awk /^qemu/{print $1,$2,$3,$4,$5,$6,$8} 注:vcpu是不同的线程&#xff0c;而不同的线程是跑在不同的cpu上&#xff0c;一般情况&#xff0c;虚拟机在运行时自身会点用3个cpus&#xff0c;为保证生产环…...

lua中判断2个表是否相等

当我们获取 table 长度的时候无论是使用 # 还是 table.getn 其都会在索引中断的地方停止计数&#xff0c;而导致无法正确取得 table 的长度&#xff0c;而且还会出现奇怪的现象。例如&#xff1a;t里面有3个元素&#xff0c;但是因为最后一个下表是5和4&#xff0c;却表现出不一…...

uni-app 自定义支付密码键盘

1.新建组件 payKeyboard .vue <template><view class"page-total" v-show"isShow"><view class"key-list"><view class"list" v-for"(item,index) in keyList" :class"{special:item.keyCode190…...

抖音微短剧小程序源码搭建:实现巨量广告数据高效回传

在数字化营销日益盛行的今天&#xff0c;抖音微短剧小程序已成为品牌与观众互动的新渠道。这些短小精悍的剧目不仅能迅速抓住用户的注意力&#xff0c;还能有效提升品牌的知名度和用户黏性。然而&#xff0c;想要充分利用这一营销工具&#xff0c;关键在于如何高效地追踪广告数…...

springboot数字化医院产科系统源码

目录 一、系统概述 二、开发环境 三、功能设计 四、功能介绍 一、系统概述 数字化产科是为医院产科量身定制的信息管理系统。它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。该系统由门诊系统、住院系统、数据统计模块三部分组成&#xff0c;与医院HIS、LI…...

uniapp微信接口回调 response.sendRedirect nginx 报404错误

如题 参考 uniapp打包H5时,访问index.html页面白屏报错net::ERR_ABORTED 404 - 简书 nginx中修改 配置文件 location / { try_files $uri $uri/ /index.html; root html; index index.html index.htm; } uniapp里配置 重新载入...

Python系统教程02

巩固 input()输出函数 回顾 1 、 input()函数&#xff1a; 在 input()函数输入时&#xff0c;输入的内容一定为字符串类型。 2 、条件分支语句&#xff1a; 每一个 if 语句可以看成一个个体&#xff0c;elif 和 else 都是一个 if 个体的一部分&#xff0c;每一个 if 个体 运…...

JS面试题6——深拷贝和浅拷贝

它们都是用来复制的 1. 浅拷贝&#xff08;只复制引用&#xff0c;而未复制真正的值&#xff09; /* 简单赋值 */ var arr1 [a, b, c, d]; var arr2 arr1; /* Object.assign实现的也是浅拷贝 */ var obj1 {a:1, b:2} var obj2 Object.assign(obj1); 2. 深拷贝&#xff08;是…...

Scrapy实现关键词搜索的数据爬取

爬虫技术对于从互联网上获取数据和信息非常重要&#xff0c;而scrapy作为一款高效、灵活和可扩展的网络爬虫框架&#xff0c;能够简化数据爬取的过程&#xff0c;对于从互联网上爬取数据的工作非常实用。本文将介绍如何使用scrapy实现关键词搜索的数据爬取。 Scrapy的介绍 Sc…...

【Linux】ip命令详解

Linux中的ip命令是一个功能强大的网络配置工具,用于显示或操作路由、网络设备、策略路由和隧道。以下是关于ip命令的详细解释: 一、ip命令介绍 简介:ip命令是一个用于显示或操作路由、网络设备、策略路由和隧道的Linux命令行工具。它取代了早期的ifconfig命令,并提供了更多…...

软降工程学系统实现

一、程序编码 程序编码是设计的继续&#xff0c;将软件设计的结果翻译成用某种程序设计语言描述的源代码。 程序编码涉及到方法、工具和过程。 程序设计风格和程序设计语言的特性会深刻地影响软件的质量和可维护性。 要求源程序具有良好的结构性和设计风格。 程序设计风格…...

001 SpringMVC介绍

文章目录 基础概念介绍BS和CS开发架构应用系统三层架构MVC设计模式 SpringMVC介绍SpringMVC是什么SpringMVC与Spring的联系为什么要学习SpringMVC 六大组件介绍六大组件(MVC组件其他三大组件)说明 基础概念介绍 BS和CS开发架构 一种是C/S架构&#xff0c;也就是客户端/服务器…...

深入解析scikit-learn中的交叉验证方法

交叉验证是机器学习中用于评估模型性能的重要技术&#xff0c;它可以帮助我们理解模型在未知数据上的泛化能力。scikit-learn&#xff08;简称sklearn&#xff09;是一个广泛使用的Python机器学习库&#xff0c;提供了多种交叉验证方法。本文将详细介绍scikit-learn中提供的交叉…...

分布式kettle调度管理平台简介

介绍 Kettle&#xff08;也称为Pentaho Data Integration&#xff09;是一款开源的ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;由Pentaho&#xff08;现为Hitachi Vantara&#xff09;开发和维护。它提供了一套强大的数据集成和转换功能&#xff0c…...

002-基于Sklearn的机器学习入门:基本概念

本节将继续介绍与机器学习有关的一些基本概念&#xff0c;包括机器学习的分类&#xff0c;性能指标等。同样&#xff0c;如果你对本节内容很熟悉&#xff0c;可直接跳过。 2.1 机器学习概述 2.1.1 什么是机器学习 常见的监督学习方法 2.1.2 机器学习的分类 机器学习一般包括监…...

ubuntu 默认的PATH配置

ubuntu 默认的PATH配置 在Ubuntu系统中&#xff0c;PATH环境变量是非常关键的&#xff0c;因为它定义了操作系统在接收到用户输入命令时&#xff0c;搜索可执行文件的目录顺序。这个变量的配置决定了哪些命令可以被系统全局识别和执行。 默认的PATH配置 Ubuntu的默认PATH环境…...

JAVA妇产科专科电子病历系统源码,前端框架:Vue,ElementUI

JAVA妇产科专科电子病历系统源码&#xff0c;前端框架&#xff1a;Vue&#xff0c;ElementUI孕产妇健康管理信息管理系统是一种将孕产妇健康管理信息进行集中管理和存储的系统。通过建立该系统&#xff0c;有助于提高孕产妇健康管理的效率和质量&#xff0c;减少医疗事故发生的…...

代码随想录算法训练营Day56|所有可达路径、797.所有可能的路径

所有可达路径 98. 所有可达路径 (kamacoder.com) 深度优先搜索&#xff0c;和之前的回溯题类似。 #include <iostream> #include <vector> using namespace std;// 定义一个二维向量来存储所有可能的路径 vector<vector<int>> paths; // 定义一个向…...

DNF手游鬼剑士攻略:全面解析流光星陨刀的获取与升级!云手机强力辅助!

《地下城与勇士》&#xff08;DNF&#xff09;手游是一款广受欢迎的多人在线角色扮演游戏&#xff0c;其中鬼剑士作为一个经典职业&#xff0c;因其强大的输出能力和炫酷的技能特效&#xff0c;吸引了众多玩家的青睐。在这篇攻略中&#xff0c;我们将详细介绍鬼剑士的一把重要武…...

npm创建一个空的vue3项目的方法或者pnpm创建vue3项目

1、前提我们已经安装了npm&#xff0c;或者pnpm 2、我们用npm来创建vue3项目 快速上手 | Vue.js 官网地址 这里我安装是的 node v18.20.3 以下是安装过程 &#xff1a; npm create vuelatest 根据自己的需要进行创建即可。 3、我们用pnpm来创建vite vue3项目 pnpm create …...

LSH算法:高效相似性搜索的原理与Python实现I

局部敏感哈希&#xff08;LSH&#xff09;技术是快速近似最近邻&#xff08;ANN&#xff09;搜索中的一个关键方法&#xff0c;广泛应用于实现高效且准确的相似性搜索。这项技术对于许多全球知名的大型科技公司来说是不可或缺的&#xff0c;包括谷歌、Netflix、亚马逊、Spotify…...

cesium 添加 Echarts图层(人口迁徒图)

cesium 添加 Echarts 人口迁徒图(下面附有源码) 1、实现思路 1、在scene上面新增一个canvas画布 2、通坐标转换,将经纬度坐标转为屏幕坐标来实现 3、将ecarts 中每个series数组中元素都加 coordinateSystem: ‘cesiumEcharts’ 2、示例代码 <!DOCTYPE html> <ht…...

Windows下快速安装Open3D-0.18.0(python版本)详细教程

目录 一、Open3D简介 1.1主要用途 1.2应用领域 二、安装Open3D 2.1 激活环境 2.2 安装open3d 2.3测试安装是否成功 三、测试代码 3.1 代码 3.2 显示效果 一、Open3D简介 Open3D 是一个强大的开源库&#xff0c;专门用于处理和可视化3D数据&#xff0c;如点云、网格和…...

无法下载 https://mirrors./ubuntu/dists/bionic/main/binary-arm64/Packages

ubuntu系统执行sudo apt update命令的时候&#xff0c;遇到如下问题&#xff1a; 忽略:82 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/universe arm64 Packages 错误:81 https://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-backports/main arm64 Packa…...

最新CRMEB商城多商户java版源码v1.6版本+前端uniapp

CRMEB 开源商城系统Java版&#xff0c;基于JavaVueUni-app开发&#xff0c;在微信公众号、小程序、H5移动端都能使用&#xff0c;代码全开源无加密&#xff0c;独立部署&#xff0c;二开很方便&#xff0c;还支持免费商用&#xff0c;能满足企业新零售、分销推广、拼团、砍价、…...