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的小伙伴可能都知道,这种直接打个标注,基本上就可以了,至于问题图片由于不能很好的切割做分类,所以干脆也做成目标…

基于图卷积神经网络(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.…

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

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

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: …

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;所以在…

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

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

CTF竞赛介绍以及刷题网址(非常详细)零基础入门到精通,收藏这一篇就够了

前言 CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今…

【保姆级教程】Windows 远程登陆 Linux 服务器的两种方式:SSH + VS Code,开发必备

0. 前言 很多情况下代码开发需要依赖 Linux 系统&#xff0c;远程连接 Linux 服务器进行开发和维护已成为一种常态。对于使用Windows系统的开发者来说&#xff0c;掌握如何通过 SSH 安全地连接到 Linux 服务器&#xff0c;并利用 VS Code 编辑器进行开发&#xff0c;是一项必备…

海外问卷调查这个项目怎么样?

大家好&#xff0c;我是橙河老师&#xff0c;今天讲一讲海外问卷调查这个项目怎么样&#xff1f;我自己做这个项目已经有三四年的时间了&#xff0c;在这个行业里算是资深玩家&#xff0c;我自己的工作室也一直稳定在操作这个项目&#xff0c;首先可以肯定的是&#xff0c;这个…

<数据集>棉花识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;13765张 标注数量(xml文件个数)&#xff1a;13765 标注数量(txt文件个数)&#xff1a;13765 标注类别数&#xff1a;4 标注类别名称&#xff1a;[Partially opened, Fully opened boll, Defected boll, Flower] 序…

甄选范文“论企业集成架构设计及应用”软考高级论文,系统架构设计师论文

论文真题 论企业集成架构设计及应用企业集成架构(Enterprise Integration Arhitecture,EIA) 是企业集成平台的核心,也是解决企业信息孤岛问题的关键。企业集成架构设计包括了企业信息、业务过程、应用系统集成架构的设计。实现企业集成的技术多种多样,早期的集成方式是通过…

仕考网:公务员可以报考军队文职吗?

公务员可以报考军队文职考试&#xff0c;但是需要满足前提条件。 对于已经与国家、地方的用人单位建立劳动关系的社会人才&#xff0c;在获得当前用人单位的许可后才可以申请报考。 在面试过程中&#xff0c;考生必须出示一份由其用人单位出具的且加盖公章的同意报考证明。一…

远程文件下载

在本机启动 http 服务&#xff0c;在你要下载文件的目录下输入 cmd &#xff0c;运行 python -m http.server前提条件&#xff1a;本机安装了 python 服务。 查看本机 IP&#xff08;无线局域网 IP&#xff09;&#xff0c;重新开一个窗口&#xff0c;查看本机 IP 地址。 ipc…

【arxiv 2024】Latte: Latent Diffusion Transformer for Video Generation

【arxiv 2024】Latte: Latent Diffusion Transformer for Video Generation 一、前言Abstract1 Introduction2 Related Work3 Methodology3.1 Preliminary of Latent Diffusion Models3.2 The model variants of Latte3.3 The empirical analysis of Latte3.3.1 Latent video c…

C语言 ——— 函数指针数组的讲解及其用法

目录 前言 函数指针数组的定义 函数指针数组的使用 前言 数组是存放一组相同类型数据的存储空间 关于指针数组的知识请见&#xff1a;C语言 ——— 指针数组 & 指针数组模拟二维整型数组-CSDN博客 那么要将多个函数的地址存储到数组中&#xff0c;这个数组该如何定义…

C++中的依赖注入

目录 1.概述 2.构造函数注入 3.setter方法注入 4.接口注入 5.依赖注入框架 6.依赖注入容器 7.依赖注入框架的工作原理 8.依赖注入的优势 9.总结 1.概述 依赖注入是一种设计模式&#xff0c;它允许我们在不直接创建对象的情况下为对象提供其依赖项&#xff1b;它通过将…