vue-router小结

1.什么是vue-router

vue-router是vue.js官方给出的路由解决方案,只能结合vue项目进行使用,能够轻松的管理SPA项目中组件的切换

2.vue-router的用法

先安装vue-router (npm i vue-router)
在新建router/index.js 文件,在文件内导入Vue和vue-router(新建的路径由自己决定)

// 导入Vue和VueRouter的包
// router/index.js文件
import Vue from 'vue'
import VueRouter from 'vue-router'// 调用Vue.use()函数,把VueRouter安装为Vue的插件
Vue.use(VueRouter)const Home = () => import("../home.vue");// 创建路由的实例对象
const router = new VueRouter({// routes是一个数组,定义"hash地址"与"组件"之间的关系routes:[// 重定向属性,当刚打开页面,并没有点击跳转时,则设置首页面渲染{path: '/',redirect: '/home'},{path: '/home',component: Home}]
})// 导出的目的是为了在main.js进行导入, 将路由实例对象挂载在 new Vue()里面
export default router

在组件中vue-router的用法

  // app.vue组件<template><div>// router-link来替代普通的a连接 to为组件路径<router-link to='/home'></router-link>// 只要在项目中安装和配置了vue-router,就可以使用router-view这个组件// 作用 : 占位符,表示渲染的内容的位置<router-view></router-view></div></template>

嵌套路由的使用

  import Vue from 'vue'import VueRouter from 'vue-router'Vue.use(VueRouter)//懒加载,打包的时候会分离,使用的时候才会加载 可减小js体积const Home = () => import('Home.vue')const tab = () => import('Tab.vue')const router = new VueRouter({routes: [{path: '/home',component: Home,// 子路由的重定向redirec: '/home/tab',// 子路由children: [// 默认子路由 如果children中的path为空,则这条路由规则,就叫做默认子路由{path: 'tab', // 子路由路径不用加/component: Tab}]}]})export default router// app.vue组件<template><div>// 路径为子路径,点击后跳转到子路径<router-link to='/home/tab'></router-link>// 若使用的是默认子路由,则to后面 /tab可以省略<router-link to='/home'></router-link><router-view></router-view></div></template>

3.动态路由的使用

// 需求: 在Movie组件中,希望根据id的值,展示对应电影的详情信息// 这里path路径中有参数,可以开启props传参,是为了方便Movie组件拿到参数值
// 在对象中加入props:true
// 如果路径中没有参数,则开启props传参也没有意义
{path: '/movie/:id',component: Movie,props: true}// id的值会存在放Vue实例中的 $route.params.id中// Movie.vue
//则这里就可以直接拿到id的值
props: ['id']

命名路由

import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)const Home = { template: '<div>This is Home</div>' }
const Foo = { template: '<div>This is Foo</div>' }
const Bar = { template: '<div>This is Bar {{ $route.params.id }}</div>' }const router = new VueRouter({mode: 'history',base: __dirname,routes: [{ path: '/', name: 'home', component: Home },{ path: '/foo', name: 'foo', component: Foo },{ path: '/bar/:id', name: 'bar', component: Bar }]
})new Vue({router,template: `<div id="app"><h1>Named Routes</h1><p>Current route name: {{ $route.name }}</p><ul><li><router-link :to="{ name: 'home' }">home</router-link></li><li><router-link :to="{ name: 'foo' }">foo</router-link></li>// 若这里是path,则不可以写params,写了不会生效<li><router-link :to="{ name: 'bar', params: { id: 123 }}">bar</router-link></li></ul><router-view class="view"></router-view></div>`
}).$mount('#app')

多个路由指向同一个组件时,组件内的生命周期钩子不会被调用了,这是因为组件被复用了,如以下代码都是指向Home组件

  const routes = [{path: '/home',component: Home},{path: '/about',component: Home}]// 使用watch则可以进行监听,对路由参数做出响应watch: {'$route'(to,from){console.log(from)}}// 也可以在组件内使用如下beforeRouteUpdate(to, from, next) {// react to route changes...// don't forget to call next()}

扩展:

a.在hash地址中,/后面的参数项,叫做’路径参数’,路由中路径参数放在params中

b.在hash地址中,?后面的参数项,叫做”查询参数”,路由中查询参数放在query中

c.在this.$route中,path只是路径部分,不包含查询参数,而fullPath则是完整路径

4.路由守卫

记住参数或查询的改变并不会触发进入/离开的导航守卫(这个是指组件内的beforeRouteEnter)。你可以通过观察 $route 对象(watch)来应对这些变化,或使用 beforeRouteUpdate 的组件内守卫。

注意: 如果是全局守卫和组件内的beforeRouteUpdate和beforeRouteLeave在动态路由跳转时也会调用触发守卫

全局前置路由守卫

   // router/index.js// to是将要访问的路由的对象// from 是将要离开的路由的对象// next是一个函数,调用next() 表示放行,允许这次路由导航router.beforeEach((to,from,next) => {next();})// next函数的3中调用方式// 当前用户拥有后台主页的访问权限,直接放行 next();// 当前用户没有后台主页的访问权限,强制跳转登录页面 next('/login')// 当前用户没有后台主页的访问权限,不允许跳转到后台主页  next(false);

使用场景:使用前置路由守卫模拟登录(代码展示)

router.beforeEach((to, from, next) => {// 判断要跳转的页面是不是登录页,如果是的话,就直接同意跳转if (to.path === '/login') {return next();}// 如果不是,则判断浏览器里是否存储了token值,判断登录是否过期,如果不存在token或者过期//则强制跳转到登录页重新进行登录else if (!localStorage.getItem('token')) {return next('/login');}// 最后则是有token值,则让其正常跳转next();
})

以上则是一个模拟登录功能的简单实现,但以上功能还没有完善,只是大概结合全局前置路由守卫进行实现

全局后置钩子

// 不会接受 next 函数也不会改变导航本身:
router.afterEach((to, from) => {// ...
})

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

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

相关文章

yandex图标点选验证码YOLOV8识别案例

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 某yandex图标点选验证码如下: 使用过yolov8的小伙伴可能都知道,这种直接打个标注,基本上就可以了,至于问题图片由于不能很好的切割做分类,所以干脆也做成目标…

探索更高效的语言模型提示-Anthropic的元提示工具

中午看到一个视频 视频地址&#xff1a; https://youtu.be/Evg4HXvsYVY?siWZLYw7lYPXttHUyw 该视频介绍了Anthropic的元提示工具&#xff0c;可以帮助用户更好地使用他们的语言模型&#xff0c;并提供了示例和指导。该工具可用于创建更好的提示&#xff0c;从而获得更具体和…

基于图卷积神经网络(GCN)的高光谱图像分类详细教程(含python代码)

目录 一、背景 二、基于卷积神经网络的代码实现 1、安装依赖库 2、建立图卷积神经网络 3、建立数据的边 4、训练模型 5、可视化 三、项目代码 一、背景 图卷积神经网络&#xff08;Graph Convolutional Networks, GCNs&#xff09;在高光谱图像分类中是一种有效的方法…

CSS实现文本溢出处理

1.单行文本溢出 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

Dependency Injection: 如何解决依赖注入失败问题

Dependency Injection: 如何解决依赖注入失败问题 &#x1f489; **Dependency Injection: 如何解决依赖注入失败问题 &#x1f489;**摘要引言正文内容1. 依赖注入的基础概念代码示例&#xff1a;构造函数注入 2. 依赖注入失败的常见原因2.1 未能找到依赖的实例2.2 循环依赖2.…

Gogs搭建免费好用的Git服务器

1、说明 代码托管系统是开发中一个不可缺少的工具&#xff0c;通过代码托管系统可以方便协同开发&#xff0c;代码权限控制&#xff0c;代码异地灾备、版本管理、问题跟踪、项目文档管理等等项目管理所必须的工具。在项目的任何一个过程中&#xff0c;代码托管系统始终有着重要…

Axios的几种不同的responseType处理响应,以及blob与arraybuffer的解析

在使用 Axios 时&#xff0c;你可以通过设置 responseType 选项来指定如何处理响应数据。Axios 提供了几种不同的 responseType 选项&#xff0c;每种选项都会影响响应数据的格式。 以下是这些选项及其示例&#xff1a; 1. responseType: json 这是默认选项&#xff0c;表示…

App测试分发的秘密:如何让你的应用程序快速上线

App测试分发的重要性 在移动应用程序的开发过程中&#xff0c;测试分发是一个非常重要的环节。它可以帮助开发者快速地将应用程序推广到目标用户手中&#xff0c;收集反馈&#xff0c;进行bug修复和优化&#xff0c;从而提高应用程序的质量和用户体验。但是&#xff0c;测试分…

创业团队如何选择DevOps工具?

极狐GitLab 正式推出 499/人/年的 SaaS 团队版&#xff0c;AI DevOps 专业技术服务支持&#xff0c;让软件研发效率起飞&#xff01;官网链接&#xff1a;https://dl.gitlab.cn/tfk6s7bh 首先要考虑创业团队关心的点&#xff0c;主要包括以下几个&#xff1a; 价格便宜 对于创…

Android分区管理工具sgdisk使用

#有时df -h查看分区信息无法满足需求# 借助Android系统自带的sgdisk可以查看详细的分区信息&#xff0c;类似fdisk命令&#xff0c;sgdisk同样可以创建分区&#xff0c;功能也很强大。 一、sgdisk帮助信息 127|console:/ # sgdisk USAGE: sgdisk [OPTION...] <device>…

linux脚本:自动检测的bash脚本,用于检查linux的系统性能

目录 一、要求 二、脚本介绍 1、脚本内容 2、解释 3、使用方法&#xff1a; &#xff08;1&#xff09;脚本文件 &#xff08;2&#xff09;赋予权限 &#xff08;3&#xff09;执行结果 三、相关命令介绍 1、top &#xff08;1&#xff09;定义 &#xff08;2&…

Layui修改表格分页为英文

Layui修改表格分页为英文 1.前言2.Laypage属性 1.前言 主要记录初次使用Layui没有好好看官方文档踩坑&#xff0c;修改了源码才发现可以自定义 使用的Layui版本2.9.14 2.Laypage属性 Laypage属性中带的有自定义文本的属性 示例代码 table.render({.......page: {skipText: …

【Python】numpy库中上难度例题4道+详解考察点(多维数组+多层嵌套循环)

题目一&#xff1a;灰度图像中识别并统计特定像素模式的出现次数 题目: 假设你正在开发一个图像处理算法&#xff0c;需要在一个较大的灰度图像中识别并统计特定像素模式的出现次数。给定一个大图像 large_image 和一个较小的模板图像 template&#xff0c;编写一个 Python 函…

2.4GHz射频前端集成芯片:AT2401C芯片中文资料

关于AT2401C的基本资料&#xff1a; AT2401C是一款面向Zigbee&#xff0c;无线传感网络以及其他2.4GHz频段无线系统的全集成射频功能的射频前端单芯片。 那么射频放大器的作用是什么&#xff1f;它是用来放大来自射频信号源的低功率信号&#xff0c;放大到较高的功率后&#xf…

7. 运行时数据区-栈

栈的分类 栈分为Java虚拟机栈还有本地方法栈&#xff1a; Java虚拟机栈&#xff1a;用于保存Java中的方法相关的内容本地方法栈&#xff1a;用于保存在Java中使用native 标记的用C来实现方法 由于hotspot的作者发现使用一个栈就可以保存以上两个部分的内容&#xff0c;所以在…

探索编程语言的基本结构

在编程的世界里&#xff0c;每种语言都有其独特的语法和规则&#xff0c;但无论是哪种语言&#xff0c;它们都遵循着一些共同的基本结构&#xff0c;这些结构构成了程序的骨架。了解这些基本结构对于初学者来说至关重要&#xff0c;因为它们是编写有效、可维护代码的基础。以下…

ElasticSearch第4篇(亿级中文数据量 ElasticSearch与Sphinx建索引速度、查询速度、并发性能、实测对比)

经过实测&#xff1a;1.09亿的数据量进行中文检索。ElasticSearch单机的检索性能在0.005~5.6秒之间&#xff0c;此检索速度可满足95%的业务场景&#xff08;注意&#xff1a;每条ES文档平均65个汉字&#xff0c;数据源取自几千本小说&#xff0c;大部分文档在15~300个汉字之间&…

守护模型安全:在Mojo模型中实现动态自定义安全性保障

守护模型安全&#xff1a;在Mojo模型中实现动态自定义安全性保障 在机器学习领域&#xff0c;模型的安全性是一个至关重要的议题。Mojo模型&#xff0c;作为一个通用的术语&#xff0c;可以指代任何机器学习或深度学习模型。随着模型被集成到生产环境中&#xff0c;确保其安全…

moment.js的使用方法

moment.js 是一个功能强大的 JavaScript 库&#xff0c;用于解析、验证、操作和显示日期和时间。虽然 moment.js 因其庞大和一些性能问题已经被推荐逐步淘汰&#xff0c;但它仍然是一个非常流行的库&#xff0c;在许多项目中使用。以下是 moment.js 的基本使用方法。 安装 你…

学习测试14-实战3-复习-使用CANoe打开半成品

数据 链接: https://pan.baidu.com/s/1k0SFq0luDvEbqimFgtfyKg?pwd9a5t 提取码: 9a5t 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 1&#xff0c;导入信号、报文、节点 2&#xff0c;导入数据库 3&#xff0c;导入can代码 4&#xff0c;导入环境变量 5&#x…