Vue项目之路由的高级用法

news2024/10/12 10:27:36

路由的高级用法

1.路由传参

1.1设置路由(在路由中预留参数)

在这里插入图片描述
组织路由地址的任意位置添加/:参数名,说明要访问这个路径就必须提供这个参数
此例中要想访问资格组件则必须提供对应的3个参数
/参数1/goods/参数2/参数3
在这里插入图片描述
注:在路由地址中设置参数,只能限制必须提供这个参数,但是无法限制提供的参数值

1.2访问路径时,如何提供参数

  • 通过router-link访问该路径:把参数写死在路径中
    在这里插入图片描述
  • 通过router.push()方法访问
    • 参数是访问路径时,把参数写死的路径中
      在这里插入图片描述
    • 参数是访问的路由对象时
      对象必须是通过name属性决定访问哪个组件,并自动规划访问路由地址
      如果没有提供必要参数,则会正常访问组件,但是没办法自动规划路径,并且控制台报出警告。
      在这里插入图片描述
      通过params属性来提供参数
      在这里插入图片描述
      有了必要的参数,就可以自动规划路径
      在这里插入图片描述

1.3访问组件时,如何使用路由地址中的参数

路由传递参数的作用是什么?
一般用于获取数据
created钩子函数中获取
在这里插入图片描述

$route是地址对象,参数保存在对象的params属性中

2.嵌套路由

内部组件在外部组件的路由视口(router-view)展示,就是嵌套路由的关系。内部组件嵌套在外部组件中。
比如Home组件在App组件的router-view中展示,那么Home作为内部组件嵌套在外部组件App中。

嵌套路由虽然不是父子组件的关系,但是满足父子组件的形式,所在创建时,可以按照子组件的规则创建内部组件。

只要是在路由视口中展示的组件就必须注册路由信息,所以in1-in3也需要路由信息。
内部组件的信息注册在外部组件信息对象的children属性中,name/component两个属性没有变化
在这里插入图片描述
path属性:内部组件的路由地址必须加载外部组件的路径之后。
此例中,in1真以为内部组件爱你,嵌套在外部组件out中,自身路径是/in1必须加载外部组件的路径之后,也就是/out/in1

内部组件的path属性可以简写:

  • 外部组件地址和自身地址最前面的’/'一起省略
    在这里插入图片描述
    注:展示内部组件时,一定会把外部组件一起展示出来

3.路由守卫

访问特定组件时,需要满足需要特殊条件。否则无法访问,这个过程被称为路由守卫

3.1全局守卫

//全局守卫
router.beforeEach((to,from,next)=>{
  //回调函数会在展示每一个组件的时候自动调用
  //3个固定参数
  // console.log(to)//当前要展示的组件的路由信息对象
  // console.log(from)//上一个组件的路由信息对象
  // next()//展示组件的方法,没有参数的时候,正常展示要展示的组件
  //也可以传递参数,展示参数路径对应的组件

  //需求:展示List组件爱你时需要判断是否需要登录
//如果已经登录,则正常展示,如果未登录则展示登录组件

  //判断访问的组件是不是List
  if (to.meta.auth){
    console.log("访问的是List组件")
    if (window.isLogin){
      //已经登录,正常展示
      next()
    }else {
      // 未登录,请先登录
      alert("请先登录")
      next('/login')
    }
  }else {
    console.log("访问的不是List组件")
  }
  next()
})
//当多个组件有相同守卫条件时,使用全局守卫
//给这些组件设置相同的标识即可

3.2独享守卫

特定组件的唯一守卫条件,即独享守卫
设置在组件的路由信息中即可

beforeEnter(to,from,next){
      //固定参数与全局守卫一致
      //独享守卫中不需要认证
      if (to.meta.auth){
        if (window.isLogin){
          //已经登录,正常展示
          next()
        }else {
          // 未登录,请先登录
          alert("请先登录")
          next('/login')
        }
      }
    }

附上index.js代码:

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'
import ToDoList from '../views/ToDo.vue'
import List from "@/views/List.vue";
import Goods from "@/views/Goods.vue";
import Out from "@/views/Out.vue";
import In1 from "@/components/Out/In1.vue";
import In2 from "@/components/Out/In2.vue";
import In3 from "@/components/Out/In3.vue";
import Login from "@/views/Login.vue";

Vue.use(VueRouter)

const routes = [
    //在App中的路由视口展示的组件爱你
    //写在数组的第一层
    //嵌套在谁里面,路由信息就注册在谁里面
  {
    path: '/',
    name: 'home',
    component: Home
  },
  {
    path: '/todolist',
    name: 'todolist',
    component: ToDoList
  },
  {
    path: '/list',
    name: 'list',
    component: List,
    meta:{
      auth:true
    },
    //独享守卫,在访问当前组件时,自动执行的方法
    beforeEnter(to,from,next){
      //固定参数与全局守卫一致
      if (to.meta.auth){
        if (window.isLogin){
          //已经登录,正常展示
          next()
        }else {
          // 未登录,请先登录
          alert("请先登录")
          next('/login')
        }
      }
    }
  },
  {
    path: '/goods/:gid',
    name: 'goods',
    component: Goods
  },
  {
    path: '/out',
    name: 'Out',
    component: Out,
    //in1-in3嵌套在out中
    //路由信息注册在out中
    //注册在children属性中
    children:[
      {
        path: 'in1',
        //内部组件的路径,必须加载外部组件路径之后
        name:'in1',
        component:In1,
      },
      {
        path: 'in2',
        name: 'in2',
        component: In2
      },
      {
        path: 'in3',
        name: 'in3',
        component: In3
      }

    ]
  },
  {
    path: '/login',
    name: 'Login',
    component: Login
  }
]

const router = new VueRouter({
  routes
})

//全局守卫
router.beforeEach((to,from,next)=>{
  //回调函数会在展示每一个组件的时候自动调用
  //3个固定参数
  // console.log(to)//当前要展示的组件的路由信息对象
  // console.log(from)//上一个组件的路由信息对象
  // next()//展示组件的方法,没有参数的时候,正常展示要展示的组件
  //也可以传递参数,展示参数路径对应的组件

  //需求:展示List组件爱你时需要判断是否需要登录
//如果已经登录,则正常展示,如果未登录则展示登录组件

  //判断访问的组件是不是List
  if (to.meta.auth){
    console.log("访问的是List组件")
    if (window.isLogin){
      //已经登录,正常展示
      next()
    }else {
      // 未登录,请先登录
      alert("请先登录")
      next('/login')
    }
  }else {
    console.log("访问的不是List组件")
  }
  next()
})
//当多个组件有相同守卫条件时,使用全局守卫
//给这些组件设置相同的标识即可

export default router

4.Vuex

设置全组件都可以访问的数据,并且通过特殊的方式修改
在这里插入图片描述
state:全组件共享的状态(数据)
mutation:修改状态的方法
action:保存修改过程中的异步状态

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

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

相关文章

信息系统项目管理师——第18章项目绩效域管理(一)

本章节内容属于第四版新增知识,为PMBOK第七版专有,选择、案例、论文都会考,属于比较重要的章节。 选择题,稳定考3分左右,新教材基本考课本原话,需要多读课本,多刷题。 案例题,考的概…

【前端Vue】社交信息头条项目完整笔记第3篇:三、个人中心,TabBar 处理【附代码文档】

社交媒体-信息头条项目完整开发笔记完整教程(附代码资料)主要内容讲述:一、项目初始化使用 Vue CLI 创建项目,加入 Git 版本管理,调整初始目录结构,导入图标素材,引入 Vant 组件库,移动端 REM 适配。二、登录注册准备,实现基本登录功能,登录状…

unity 使用Base64编码工具对xml json 或者其他文本进行加密 解密

Base64编码加密解密工具 这是一个加密解密的网页工具&#xff0c;别人可以把他加密后的字符串给你&#xff0c;然后你可以用代码解密出来&#xff0c; 或者自己对内容进行加密&#xff0c;解密处理。 /// <summary>/// Base64 解码/// </summary>string DecodeBase…

销售与营销的区别:从手中到心中

一、引言 在商界&#xff0c;销售和营销常常被视为同义词&#xff0c;但实际上它们各自扮演着不同的角色。简而言之&#xff0c;销售是将产品送到客户手里&#xff0c;而营销则是将产品送到客户心里。这种微妙的差异对于企业的成功至关重要。正如彼得德鲁克所说&#xff1a;“…

处理SAP报错:消息GLT2076 没有项目种类分配到科目 1481010102/1000

财务新建了个科目入账时报错&#xff1a;没有项目种类分配到科目。 查了下原因。原来是我们公司实施时启用了凭证分割功能。其中有个配置是这样的&#xff1a;给总账科目分类&#xff1a;IMG-财务会计&#xff08;新&#xff09;-总账会计核算-业务交易-凭证分解-为文档拆分给总…

【Java多线程(4)】案例:设计模式

目录 一、什么是设计模式&#xff1f; 二、单例模式 1. 饿汉模式 2. 懒汉模式 懒汉模式-第一次改进 懒汉模式-第二次改进 懒汉模式-第三次改进 一、什么是设计模式&#xff1f; 设计模式是针对软件设计中常见问题的通用解决方案。它们提供了一种被广泛接受的方法来解决…

usbserial驱动流程解析_Part1_主要函数

本系列解析usbseiral ko的源码&#xff0c;记录主要函数&#xff0c;调用流程&#xff0c;USB一端和串口一端的注册流程&#xff0c;本节简介主要函数以及替换规则。 首先&#xff0c;usbserial是USB转串口驱动的一个基础模板&#xff0c;其中有许多默认函数&#xff0c;他们的…

企业管理新思考:利润率与质量在创业路上的重要性

一、引言 在当下这个充满变革与挑战的商业环境中&#xff0c;创业者和企业家们时常面临着规模扩张与利润增长之间的权衡。著名天使投资人吴世春先生的一席话&#xff0c;为我们指明了方向&#xff1a;“做企业利润率优先于规模&#xff0c;质量优先于数量。”这一深刻见解&…

Apache DolphinScheduler 【安装部署】

前言 今天来学习一下 DolphinScheduler &#xff0c;这是一个任务调度工具&#xff0c;现在用的比较火爆。 1、安装部署 1.0、准备工作 1.0.1、集群规划 dolphinscheduler 比较吃内存&#xff0c;所以尽量给 master 节点多分配一点内存&#xff0c;桌面和虚拟机里能关的应用…

Qt C++ | Qt 元对象系统、信号和槽及事件(第一集)

01 元对象系统 一、元对象系统基本概念 1、Qt 的元对象系统提供的功能有:对象间通信的信号和槽机制、运行时类型信息和动态属性系统等。 2、元对象系统是 Qt 对原有的 C++进行的一些扩展,主要是为实现信号和槽机制而引入的, 信号和槽机制是 Qt 的核心特征。 3、要使用元…

JRT简化开发环境

JRT是完全前后端分离的项目&#xff0c;实际工程是逻辑上完全前后端分离&#xff0c;代码层级和工程是不离的。这样就可以做到一键启动&#xff0c;同时又有分离的好处。开始页面后缀都沿用aspx&#xff0c;最开始考虑过修改后缀为html&#xff0c;当时觉得搞aspx也不错&#x…

深度学习模型--生成对抗网络(GAN)

AI大模型学习 方向一&#xff1a;AI大模型学习的理论基础 提示&#xff1a;探讨AI大模型学习的数学基础、算法原理以及模型架构设计等。可以深入分析各种经典的深度学习模型&#xff0c;如卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;以…

Unity | Shader基础知识(第十一集:什么是Normal Map法线贴图)

目录 前言 一、图片是否有法线贴图的视觉区别 二、有视觉区别的原因 三、法线贴图的作用 四、信息是如何存进去的 五、自己写一个Shader用到法线贴图 六、注意事项 七、作者的话 前言 本小节会给大家解释&#xff0c;什么是法线贴图&#xff1f;为什么法线贴图会产生深…

从神经元到深度学习:探索多层感知机与卷积神经网络的奥秘

深度学习&#xff1a;探索未来的钥匙 在当今技术飞速发展的时代&#xff0c;深度学习已成为科技界的一颗璀璨明珠&#xff0c;它不仅推动了人工智能的边界扩展&#xff0c;还在诸多领域中展现出了巨大的应用潜力。从自动驾驶汽车、语音识别到医疗诊断&#xff0c;深度学习正在…

【C++练级之路】【Lv.18】哈希表(哈希映射,光速查找的魔法)

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、哈希1.1 哈希概念1.2 哈希函数1.3 哈希冲突 二、闭散列2.1 数据类型2.2 成员变量2.3 默认成员函数2.…

AMD Radeon™ PRO W7900安装要求

Radeon PRO W7900 Radeon PRO W7900是AMD于2023年4月13日推出的发卡级专业显卡。基于5nm工艺&#xff0c;基于Navi 31图形处理器&#xff0c;在其Navi 31变体中&#xff0c;该卡支持DirectX 12 Ultimate。Navi 31图形处理器的芯片面积为529mm2&#xff0c;拥有577亿个晶体管。…

YooAssets 使用相关

## 使用 YooAssets 动态加载原生文件时候 > 原生文件&#xff1a;txt&#xff1b;json&#xff1b;等需要直接保存文件内string字符的文件 需要将打包方式设置成为&#xff0c;PackRawFile 并且加载时候使用 API &#xff1a; YooAssets.LoadRawFileSync()YooAssets.LoadRa…

金三银四面试题(十三):Java基础问题(4)

这部分面试题多用于面试的热身运动&#xff0c;对很多找实习和准备毕业找工作的小伙伴至关重要。 ArrayList,Vector和LinkedList ArrayList 和 Vector 都是使用数组方式存储数据&#xff0c;此数组元素数大于实际存储的数据以便增 加和插入元素&#xff0c;它们都允许直接按序…

U盘弹不出?事件查看器

使用完U盘或者硬盘遇到弹不出&#xff0c;是直接拔掉还是关机再拔&#xff1f; no no no 看这&#xff01; 1、开始菜单&#xff0c;或者叫“windows” 2.右键&#xff0c;点击按键“V”; 3.看到了事件查看器&#xff1b; 是PDF阅读器在占用文件&#xff1b; 关闭就正常了&…

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF&#xff08;Gramian Angular Summation Field&#xff09;的方法&#xff0c;将一维数据转换为二维图像的步骤描述 标准化数据&#xff1a; 首先&#xff0c;对一维时序数据进行标准化处理&#xf…