Vue 路由跳转

news2024/10/7 6:44:24

文章目录

  • 前言
  • 路由基础
  • 子路由
  • 路由传参
    • query 传参 path
      • 静态传参
      • 动态传参
    • params 传参 name
  • 编程式路由
    • 利用JS实现路由跳转 router
  • 路由守卫


前言

提示:这里可以添加本文要记录的大概内容:

views里面放的是视图子组件(首页、商家列表、商品列表),以View.vue结尾
components里面放得是通用的子组件

views和components文件夹区别
views和components文件夹都可以存放组件文件
views一般存放视图组件
components一般存放通用的子组件(底部菜单)
视图组件起名字时结尾最好是View结尾


路由基础

提示:以下是本篇文章正文内容,下面案例可供参考

新建项目时要把Router空格勾选上
在这里插入图片描述
在这里插入图片描述
router文件夹中的index.js文件放的是路由的配置文件

是一个数组类型
在这里插入图片描述
有写视图必然访问:静态导入
有写视图可能用不到:动态导入

运行原始生成的项目:
上面有两个链接
在这里插入图片描述
router-link显示的就是About效果,运行时变成超链接

<router-link to="/about">About</router-link>

路由出口:没有它路由跳转的视图无法显示

<router-view/>

在生成的原始项目父组件中只需要留一个路由出口,其他的都可以删掉
在这里插入图片描述
在存放路由的配置文件index.js中,删掉HomeView导入,默认的路由配置对象删掉
在这里插入图片描述
还有components和views文件夹下的自动生成的文件也都删掉

子路由

children:[
  {
  
  }
]

【示例案例】
在views文件夹中新建IndexView.vue文件,vue生成后只写一个h1标签表明身份(首页视图)
在views文件夹中新建LoginView.vue文件,vue生成后只写一个h1标签表明身份(登录视图)

然后到路由的配置文件index.js中导入首页的视图组件

// .vue 可省略
import LoginView from '@/views/LoginView'

配置首页与登录的视图组件对象

// 路由配置对象
const routes = [
  {
    path: '/',
    name: 'login',
    component: LoginView
  },
  {
    path: '/index',
    name: 'index',
    component: () => import('@/views/IndexView')
  },
]

运行项目:
在这里插入图片描述
接下来给页面分割布局,分为三个区域:顶部、侧边栏(<aside>)和主要区域(<section>)。

<router-link> 组件定义了一个可以点击的链接,通过属性 to 指定了链接的目标路径为根路径。当用户点击该链接时,路由会把 URL 跳转到根路径,并渲染对应的组件。
工作区域(<section>)则是根据路由动态渲染的组件所呈现的区域。通过这种方式,我们可以在同一个基本布局下切换不同的页面内容。
另外给代码加了些css样式

<template>
    <div>
      <div class="header">
        <h1>首页视图</h1>
      </div>
      <div class="main">
        <aside>
          <router-link to="">商品查询</router-link>
        </aside>
        <section>
          <p>工作区域</p>
          <router-view></router-view>
        </section>
      </div>
    </div>
  </template>
  
  <script>
  export default {
    data() {
      return {};
    },
    methods: {},
    components: {},
    computed: {},
    watch: {},
    mounted() {}
  };
  </script>
  
  <style scoped>
  .header {
    background-color: #333;
    color: #fff;
    text-align: center;
    padding: 20px 0;
  }
  
  .header h1 {
    font-size: 36px;
    margin: 0;
    text-shadow: 2px 2px #444;
  }
  
  .main {
    height: calc(100vh - 100px);
    display: flex;
  }
  
  aside {
    flex: 0 0 150px;
    background-color: #f5f5f5;
    display: flex;
    flex-direction: column;
    padding: 10px;
    overflow: auto;
  }
  
  section {
    flex: 1;
    background-color: #fff;
    padding: 20px;
    box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.1);
    overflow: auto;
  }
  </style>

我们要一点超链接就要在工作区显示对应的页面
所以新建一个商品文件(GoodsView.vue)
vue生成基本结构后只写一个h2标签表明身份(商品查询视图)

有一个视图就要增加一个视图的配置
children增加,因为可能有多个列表

  {
    path: '/index',
    name: 'index',
    component: () => import('@/views/IndexView'),
    children: [
      {
      path: '/index/goods',
      name: 'goods',
      component: () => import('@/views/GoodsView')
      }
    ]
  }
]

最后把/index/goods路径放在IndexView里面

<router-link to="/index/goods">商品查询</router-link>

运行效果:
在这里插入图片描述

路由传参

先新建两个View(ParamView1.vue 和 2),在ParamView1.vue里面加个router-link跳转到ParamView2.vue,在跳转时进项传参

    <!-- Parameter的缩写 -->
    <h1>路由传参1</h1>
    <router-link to="">param2</router-link>

ParamView2.vue内用vue生成后写:

    <h2>路由传参2</h2>
    {{  }}

接下来给这两个视图做一个路由的配置,在index.js页面

  {
    // 三个基本项
    path: '/param1',
    name: 'param1',
    component: () => import('@/views/Param1View.vue')
  },
  {
    path: '/param2',
    name: 'param2',
    component: () => import('@/views/Param2View.vue')
  }

随后把param2的路由地址复制到param1的跳转路径下

    <router-link to="/param2">parameter2</router-link>

随后运行:Param1View视图显示出来了
在这里插入图片描述
点击超链接:
在这里插入图片描述
跳转成功后接下来传参

query 传参 path

静态传参

在param1中再写一个超链接,用query传参

    <router-link :to="{path:'/param2',query:{name:'张三'}}">param2-query传参</router-link>

请添加图片描述
其中地址栏中的变化就是传的参

取出路由传递的数据:在Param2View的插值语法中写this.$route.query.数据名字

    {{ this.$route.query.name }}

这时候参数就取出显示出来了
在这里插入图片描述

动态传参

在Param1View中加一个输入框input,有输入框就有v-model完成数据双向绑定

<input type="text" v-model="name">

想要的效果:在输入框中输入什么内容就让那个内容传到Param2View中

这时候在data中配置一个数据名

name: ''

随后在上面超链接中把静态数据改成动态数据(path属性):

    <router-link :to="{path:'/param2',query:{name:name}}">param2-query传参</router-link>

请添加图片描述

params 传参 name

在index.js中在正常路径后面加一个动态参数支持 params 传参

	// 斜线:/id与age(假定数据)
    path: '/param2/:id/:age',
    name: 'param2',
    component: () => import('@/views/Param2View.vue')

回到Param1View里面,在template标签内再加一个超链接,写动态跳转对象(name属性)

    <router-link :to="{name:'param2',params:{id:1,age:30}}">param2-params传参</router-link>

再到Param2View里面把参数取出来用(还是插值语法)

{{ this.$route.params.id }}<br>
{{ this.$route.params.age }}

回到param1路径点击第三个链接跳转到param2页面:
在这里插入图片描述
在这里插入图片描述

params传参数据的安全度高

编程式路由

利用JS实现路由跳转 router

在Param1View里面加一个按钮与事件+函数

     <button @click="goParam2">param2</button>

methods内编写函数

  methods: {
    goParam2(){
      // 编程式路由
      this.$router.push('/param2')
    }
  },

因为单纯跳转不需要传参,所以在index.js中删掉地址

  {
    path: '/param2',
    name: 'param2',
    component: () => import('@/views/Param2View.vue')
  }

在这里插入图片描述
点击按钮到param2页面
在这里插入图片描述
如果要传参:

index.js页面内加上id数据测试

  {
    path: '/param2/:id',
    name: 'param2',
    component: () => import('@/views/Param2View.vue')
  }

Param1View页面内:

  methods: {
    goParam2(){
      // 编程式路由
      //this.$router.push('/param2')
      this.$router.push({
        name: 'param2',
        params: { id:100 }
      })
    }
  },

输出结果:
在这里插入图片描述

路由守卫

路由守卫就像是一个应用程序的保安。它们可以确保用户只能访问他们有权限访问的页面,防止未经授权的访问。
就像保安在门口检查身份一样,路由守卫可以在路由导航之前或之后检查用户的身份验证和权限,以确保应用程序的安全性和完整性。
同时路由守卫还可以控制路由的激活和离开,确保用户在进行敏感操作时不会意外离开页面。

路由守卫代码写在main.js内的在创建vue对象之前

// 路由守卫
router.beforeEach((to,from,next) =>{
    console.log('路由守卫');
})

此时是大白屏,因为路由路由守卫起作用了,右键控制台可以看见输出

下面加个方法调用next()放行,这时候就可以访问首页了

// 路由守卫
router.beforeEach((to,from,next) =>{
    console.log('路由守卫');
    next()
})

在登录状态的时候需要放行
判断登录状态:在开发者工具内选择应用
在这里插入图片描述
本地存储空间:存在本地,只要不删就一直在
会话存储空间:浏览器不关数据一直在

在main.js内删掉log输出,完善路由守卫代码

// 路由守卫
router.beforeEach((to,from,next) =>{
    let login = sessionStorage.getItem('login')
    //判断
    if(login!=null){
        next()
    }
    
})

这段代码是Vue Router中的路由守卫,它会在进行路由跳转前执行。在这里,我们从sessionStorage中获取名为'login'的值,如果该值不为null,则通过执行next()函数允许进行下一步操作,即允许进行路由跳转,否则路由跳转会被阻止。
这段代码的作用是保护需要登录才能访问的页面,如果用户没有登录,则不允许访问被保护的页面。
在这里插入图片描述
如果把会话存储内的数据删掉,路由守卫会不放行

在一个项目中,如果用户没登录应该让他跳转到登录页面
首先关掉浏览器,在main.js中调用router.push('/')函数将用户重定向到登录页面

效果:如果不是登录页面,则通过调用router.push('/')函数将用户重定向到登录页面,防止用户直接访问需要登录才能访问的页面。

// 路由守卫
router.beforeEach((to,from,next) =>{
    let login = sessionStorage.getItem('login')
    //判断
    if(login!=null || to.path=='/'){
        next()
    }else{
        router.push('/')
    }

})

这段代码的作用是保护需要登录才能访问的页面,如果用户没有登录,则不允许访问被保护的页面,并且在用户没有登录的情况下,会将用户重定向到登录页面

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

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

相关文章

MySQL(九):MySQL语法-高级

MySQL语法-高级 LIMITLIKEASCREATE UNIQUE INDEX、DROP INDEXCREATE VIEW、DROP VIEWGROUP BYHAVINGMYSQL - JOININNER JOIN、JOINLEFT JOIN、LEFT OUTER JOINRIGHT JOIN、RIGHT OUTER JOINLEFT JOIN ... WHERE ...RIIGHT JOIN ... WHERE ... TRUNCATE TABLEINSERT INTO 表1 (列…

信创电子档案管理单机版系统之档案利用的功能介绍

专久智能信创电子档案管理单机版系统的档案利用&#xff0c;包括对电子档案的网上利用和对档案实体的借阅两种方式&#xff0c;用户对档案的利用都是通过 WEB 方式的档案网站实现的。 用户可以根据系统赋予的权限对电子档案目录进行检索查询&#xff0c;找到所需的档案目录&…

图像分类——图像增强方法

目录 常用的图像增强方法tf.image进行图像增强翻转和裁剪颜色变换 使用ImageDataGenerator(进行图像增强) 常用的图像增强方法 tf.image进行图像增强 离线实现 import tensorflow as tf import matplotlib.pyplot as plt import numpy as npcatplt.imread(./cat.jpg) plt.ims…

【后端面经-架构】RabbitMQ简介

【后端面经-架构】RabbitMQ简介 1. MQ介绍2. RabbitMQ2.1 简介2.2 架构&#xff1a;组件解释2.3 特点2.4 优缺点 面试模拟参考资料 1. MQ介绍 MQ&#xff08;Message Queue&#xff09;用于在应用程序之间相互通信&#xff0c;在消息中发送数据进行通信&#xff0c;而不需要特…

数据结构(王卓版)——算法分析

一个好算法如何衡量&#xff1a; 分析算法时间复杂度的方法&#xff1a; 复杂算法的计算规则&#xff1a; 空间复杂度

【深度学习】基于BRET的高级主题检测

一、说明 使用BERT&#xff0c;UMAP和HDBSCAN捕获文档主题&#xff0c;紧随最先进的BERTopic架构&#xff08;transformer编码器&#xff09;。 主题检测是一项 NLP 任务&#xff0c;旨在从文本文档语料库中提取全局“主题”。例如&#xff0c;如果正在查看书籍描述的数据集&am…

fatal: unable to access ‘http://xxxx‘: Empty reply from server

当你遇到 “fatal: unable to access ‘http://xxxx’: Empty reply from server” 的错误信息时&#xff0c;通常表示 Git 客户端无法连接到指定的服务器或仓库。 以下是一些可能导致该错误的原因以及一些排除故障的步骤&#xff1a; 错误的 URL&#xff1a;确保你提供的 URL…

linux 服务器之间传输文件的方式

情景&#xff1a;有时迁移项目&#xff0c;一般人就想到需要在服务器下载到win本地电脑上面&#xff0c;再上传到目的服务器&#xff0c;这样若是文件大&#xff0c;下载的速度都足够让你歇一天了。遇到这问题&#xff0c;怎么解决呢&#xff1f; 方法1&#xff1a;scp 【优点…

数据结构---手撕图解双向循环链表

文章目录 写在前面双向循环链表的构造布局带有哨兵位的布局 链表的构建链表的销毁链表的输出链表的尾插链表的尾删链表的头插链表的头删链表的查找链表的插入链表的删除 写在前面 在前面学完单链表后&#xff0c;我们思考这样一个问题&#xff0c;单链表和顺序表比起来&#x…

RK3588平台开发系列讲解(Camera篇)V4L2 视频采集步骤

文章目录 一、V4L2 视频采集步骤1.1、查询设备能力1.2、设置采集参数1.3、请求帧缓冲1.4、映射帧缓冲1.5、启动视频采集1.6、停止视频采集沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解V4L2 视频采集步骤。 一、V4L2 视频采集步骤 V4L2 视频采集的常用…

28. 在O(1)时间删除链表结点

链接&#xff1a; 链接 题目&#xff1a; 给定单向链表的一个节点指针&#xff0c;定义一个函数在O(1)时间删除该结点。 假设链表一定存在&#xff0c;并且该节点一定不是尾节点。 数据范围 链表长度 [1,500][1,500]。 样例 输入&#xff1a;链表 1->4->6->8删掉节点&…

指针和数组笔试题解析(最详细解析,没有之一)

指针和数组笔试题解析&#xff08;最详细解析&#xff0c;没有之一&#xff09; 前言1. 一维数组和指针相关笔试题2. 字符数组和指针相关笔试题2.1 题型一&#xff1a;2.2 题型二&#xff1a;2.3 题型三&#xff1a;2.4 题型四&#xff1a; 3. 指针和字符串相关面试题3.1 题型一…

华为云CodeArts Check代码检查插件3大版本使用指南

华为云CodeArts Check是自主研发的代码检查服务。为用户提供代码风格、通用质量与网络安全风险等丰富的检查能力&#xff0c;提供全面质量报告、便捷的问题闭环处理帮助企业有效管控代码质量&#xff0c;助力企业成功。 本插件致力于守护开发人员代码质量&#xff0c;成为开发…

【低代码专题方案】使用iPaaS平台下发数据,快捷集成MDM类型系统

01 场景背景 伴随着企业信息化建设日趋完善化、体系化&#xff0c;使用的应用系统越来越多&#xff0c;业务发展中沉淀了大量数据。主数据作为数据治理中枢&#xff0c;保存大量标准数据库&#xff0c;如何把庞大的数据下发到各个业务系统成了很棘手的问题。 传统的数据下发方…

英国大学生用AI写论文拿到1等成绩!ChatGPT写论文教程+提示词分享

今年期末季与往年的一大不同就是有了“哆啦C梦”——ChatGPT。过于高效智能的它&#xff0c;上线初期就引起了学术界关于“学术不端”的热烈讨论… 目录 01.用AI写论文获1等成绩 02.如何用ChatGPT辅助学习/写作 01.迅速get知识点 02.辅助理解内容 03.辅助起草论文大纲 0…

3Ds max入门教程:创建埃菲尔铁塔

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 创建任何细节并不总是必要的&#xff0c;有时在场景中您需要在后台添加一些元素&#xff0c;这给人的印象是事件正在特定地点发生。这种方法可以节省大量的时间和精力。因此&#xff0c;在本教程中&#xf…

SpringBoot整合ZooKeeper完整教程

目录 ZooKeeper简单介绍 一、安装zookeeper 二、springboot整合zookeeper ZooKeeper简单介绍 zookeeper是为分布式应用程序提供的高性能协调服务。zookeeper将命名、配置管理、同步和组服务等常用服务公开在一个简单的接口中&#xff0c;因此用户无需从头开始编写这些服务。可…

【SpringBoot3】--03.数据访问、基础特性(外部化和内部外配置、整合JUnit)

文章目录 SpringBoot3-数据访问1.整合SSM场景1.1创建SSM整合项目1.2配置数据源1.3配置MyBatis1.4CRUD编写 2.自动配置原理3.扩展&#xff1a;整合其他数据源3.1 Druid 数据源 SpringBoot3-基础特性1. SpringApplication1.1 自定义 banner1.2.自定义 SpringApplication1.3Fluent…

【ELK企业级日志分析系统】部署Filebeat+ELK详解

部署FilebeatELK详解 1. 部署Filebeat节点1.1 部署Apache服务1.2 部署Filebeat服务 2. filter插件2.1 grok正则捕获插件2.1.1 内置正则表达式调用2.1.2 自定义表达式调用2.1.3 设置正则表达式过滤条件 2.2 mutate数据修改插件2.2.1 Mutate过滤器常用的配置选项2.2.2 Mutate过滤…

ROS2学习(一 、ROS2安装)

ROS2官方安装 https://docs.ros.org/en/galactic/Installation/Ubuntu-Install-Debians.html 本来想找一下和ros1一样的安装指导文档&#xff0c;可以根据自己的系统选择。不过没有找到一个直接的说明教程。 不过在ROS2的各个版本安装说明里面有写支持哪些版本的系统。 比如我…