前端基础(Vue Router路由的使用)

news2024/12/28 23:15:41

前言:很多网站都有页面的跳转,那具体页面跳转是怎样实现的?今天学习前端SPA(Single page Application)单页面应用,不反复请求后端资源,而是通过路由实现页面的跳转。

目录

路由的创建

main.ts导入路由

App.vue文件

展示效果

子路由

router文件导入

子路由创建

链接式

编程式

页面的跳转

展示效果

获取路由信息

路由传参方式

参数传参

路由传参 

完整代码


安装vue-router

npm install vue-router

路由的创建

在router文件夹下创建一个index.ts文件,默认导出

路由的动态导入

import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: "/home",
      component: () => {
      return import("@/views/Home.vue");
      },
    },
    {
      path: "/test",
      component: () => {
      return import('../views/Test.vue');
      },
    },
  ]
})
export default router;

其中Home.vue文件

<template>
  <div>
    <h1>欢迎来到MRJJ_9的路由学习之旅</h1>
  </div>
</template>

<script setup>
</script>

<style lang="scss" scoped>
</style>

Test.vue文件 

<template>
  <div>
    <h1>这是MRJJ_9的学习记录</h1>
    <ul>
        <li>step</li>
        <li>result</li>
    </ul>
  </div>
</template>

<script setup>
</script>

<style lang="scss" scoped>
</style>

main.ts导入路由

在main.ts文件中导入使用,一定要保存!!!

import router from './router'
createApp(App).use(router).mount('#app')

 

App.vue文件

<template>
<main>
    <router-link to="/home">首页</router-link>
    <br/>
    <router-link to="/test">详情</router-link>
    <RouterView></RouterView>
</main>
</template>


<script setup>
</script>

<style scoped>

</style>

展示效果

子路由

router文件导入

import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/home',
      component: () => {
        return import('@/views/Home.vue')
      }
    },
    {
      path: '/test',
      component: () => import('../views/Info/Test.vue'),
      children: [
        {
          path: 'step',
          component: () => import('../views/Info/step.vue')
        },
        {
          path: 'result',
          component: () => import('../views/Info/result.vue')
        }
      ]
    }
  ]
})
export default router

子路由创建

链接式

使用RouterLink元素 

<template>
  <div>
    <h1>这是MRJJ_9的学习记录</h1>
    <ul>
      <li><RouterLink to="/test/step">测试过程</RouterLink></li>
      <li><RouterLink to="/test/result">测试结果</RouterLink></li>
    </ul>
    <RouterView></RouterView>
  </div>
</template>

<script setup>
</script>

<style lang="scss" scoped>
</style>

编程式

<template>
  <div>
    <h1>这是MRJJ_9的学习记录</h1>
    <ul>
      <li @click="toStep">测试过程</li>
      <li @click="toResult">测试结果</li>
    </ul>
    <RouterView></RouterView>
  </div>
</template>

<script setup>
// import router from '@/router'
import { useRouter } from 'vue-router'
const router = useRouter()
function toStep() {
  router.push('test/step')
}
function toResult() {
  router.push('test/Result')
}
</script>

<style lang="scss" scoped>
</style>

页面的跳转

function backwordRouter() {
  router.back()
}
function forwordRouter() {
  router.forward()
}
function jumpRouter() {
  router.go(-3)
}

展示效果

获取路由信息

useRoute() 当前页面的路由信息

useRouter() 整个项目的路由信息

路由传参方式

参数传参

query urlencoded参数传参 键=值&键=值

<li><router-link to="/test/step?name=mrjj&stage=10">通过routerLink传参调用测试过程</router-link></li>

通过query调用

<li>UI测试:{{ route.query.name }}</li>

<li>接口测试:{{ route.query.stage }}</li>

路由传参 

<li><router-link to="/test/step/mrjj/100">通过Params传参</router-link></li>

通过params调用 

<li>UI测试:{{ route.params.name }}</li>

<li>接口测试:{{ route.params.stage }}</li>

通过props接受参数

{path: 'result/:result1?/:result2?',
props:true,
component: () => import('../views/info/result.vue')}
<li><router-link to="/test/result/success/fail">result通过Params传参</router-link></li>
<template>
  <ul>
    <li>测试通过:{{ result1 }}</li>
    <li>测试不通过:{{ result2 }}</li>
  </ul>
</template>

<script setup>
const props = defineProps(['result1', 'result2'])
</script>

<style lang="scss" scoped>
</style>

完整代码

router/index.ts

import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
  history: createWebHistory(),
  routes: [
    {
      path: '/home',
      component: () => {
        return import('@/views/Home.vue')
      }
    },
    {
      path: '/test',
      component: () => import('../views/info/Test.vue'),
      children: [
        {
          path: 'step/:name?/:stage?',
          component: () => import('../views/info/step.vue')
        },
        {
          path: 'result/:result1?/:result2?',
          props:true,
          component: () => import('../views/info/result.vue')
        }
      ]
    }
  ]
})
export default router

views/Test.vue 

<template>
  <div>
    <h1>这是MRJJ_9的学习记录</h1>
    <ul>
      <li><router-link to="/test/step?name=mrjj&stage=10">通过routerLink传参</router-link></li>
      <li><router-link to="/test/step/mrjj/100">通过Params传参</router-link></li>
      <li><router-link to="/test/result/success/fail">result通过Params传参</router-link></li>
      <li @click="toStep">测试过程</li>
      <li @click="toResult">测试结果</li>
      <li @click="backwordRouter">后退</li>
      <li @click="forwordRouter">前进</li>
      <li @click="jumpRouter">跳几步</li>
    </ul>
    <RouterView></RouterView>
  </div>
</template>

<script setup>
// import router from '@/router'
import { useRouter } from 'vue-router'
const router = useRouter()
function toStep() {
  router.push('test/step')
}
function toResult() {
  router.push('test/Result')
}
function backwordRouter() {
  router.back()
}
function forwordRouter() {
  router.forward()
}
function jumpRouter() {
  router.go(-3)
}
</script>

<style lang="scss" scoped>
</style>

views/Step.vue

<template>
  <ul>
    <li>UI测试:{{ route.query.name }}</li>
    <li>接口测试:{{ route.query.stage }}</li>
    <li>_______________________________</li>
    <li>UI测试:{{ route.params.name }}</li>
    <li>接口测试:{{ route.params.stage }}</li>
  </ul>
</template>

<script setup>
import { useRouter, useRoute } from 'vue-router'
const router = useRouter()
const route = useRoute()
console.log('router是:', router)
console.log('route是:', route)
</script>

<style lang="scss" scoped>
</style>

views/Result.vue

<template>
  <ul>
    <li>测试通过:{{ result1 }}</li>
    <li>测试不通过:{{ result2 }}</li>
  </ul>
</template>

<script setup>
const props = defineProps(['result1', 'result2'])
</script>

<style lang="scss" scoped>
</style>

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

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

相关文章

【数据库】关系模型介绍+形式化关系查询语言

目录 第2章 关系模型介绍 2.1 关系数据库的结构 关系 2.2 数据库模式 2.3 码 2.4 模式图 大学数据库的模式图&#xff01;&#xff01;&#xff01; 大学数据库关系模式&#xff01;&#xff01;&#xff01; 2.5 关系查询语言 2.6 关系运算 2. 7 总结 第6章 形式化…

OceanBase社区版4.x核心技术解密

数字化时代&#xff0c;各行各业的数据量呈现爆发式增长&#xff0c;对于海量数据价值的挖掘和应用&#xff0c;正成为推动创新的主要力量&#xff0c;与此同时&#xff0c;数据计算复杂度正在提升。在此背景下&#xff0c;对于数据处理的基石数据库而言&#xff0c;正面临市场…

基于Springboot实现的Echarts图表

概述 ECharts是百度开源的一个前端组件。它是一个使用 JavaScript 实现的开源可视化库&#xff0c;可以流畅的运行在 PC 和移动设备上&#xff0c;兼容当前绝大部分浏览器&#xff08;IE8/9/10/11&#xff0c;Chrome&#xff0c;Firefox&#xff0c;Safari等&#xff09;&…

02_nodejs开发环境安装

02 【nodejs开发环境安装】 1.版本介绍 在命令窗口中输入 node -v 可以查看版本0.x 完全不技术 ES64.x 部分支持 ES6 特性5.x 部分支持ES6特性&#xff08;比4.x多些&#xff09;&#xff0c;属于过渡产品&#xff0c;现在来说应该没有什么理由去用这个了6.x 支持98%的 ES6 特…

Matlab图像处理-图像反转

图像反转 图像反转变化实质上是将图像明暗两种灰度进行互补运算后互换处理&#xff0c;理论上是由反比变换所得&#xff0c;其表达式为&#xff1a; sL−1−r 其中L−1为该灰度级中最大灰度值。 在MATLAB中&#xff0c;常使用imadjust()或imco…

12 mysql char/varchar 的数据存储

前言 这里主要是 由于之前的一个 datetime 存储的时间 导致的问题的衍生出来的探究 探究的主要内容为 int 类类型的存储, 浮点类类型的存储, char 类类型的存储, blob 类类型的存储, enum/json/set/bit 类类型的存储 本文主要 的相关内容是 char 类类型的相关数据的存储 …

python常用包/库

目录 NumpypandasMatplotlibSeabornScikit-learnKerasOpenCV Numpy NumPy库是Python中一个广泛使用的数学库&#xff0c;主要用于处理多维数组和矩阵。它提供了许多用于数组操作的功能&#xff0c;包括数组创建、索引、切片、广播、数学运算、统计分析等。NumPy库还提供了许多…

3D点云处理:点云形态学腐蚀运算

文章目录 0. 测试效果1. 基本内容1.1 2D方法对点云进行腐蚀运算1.2 3D方法对点云进行腐蚀运算文章目录:3D视觉个人学习目录微信:dhlddxB站: Non-Stop_目标:去除点云的边缘噪声等;0. 测试效果 红色为腐蚀后的点云;白色为原始点云; 1. 基本内容 点云腐蚀是一种用于处理三维…

2.2 Vector<T> 动态数组(模板语法)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 动态数组 Vector&#xff08;难度1&#xff09; 其中&#xff0c;2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 本文目标 1 学会写基本的C类模板语法&#xff1b; 2 为以后熟练使用 S…

新功能上线!Salesforce Field Service人工智能创新

Salesforce Field Service是Service Cloud的扩展&#xff0c;可提供员工管理的全面视图。Field Service专为进行现场服务的员工而设计&#xff0c;例如服务技术人员、服务座席、调度员等。随着Salesforce平台上线越来越多的生成式AI新增功能&#xff08;包括Sales Cloud、Marke…

Python学习教程:进程的调度

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 要想多个进程交替运行&#xff0c;操作系统必须对这些进程进行调度&#xff0c; 这个调度也不是随即进行的&#xff0c;而是需要遵循一定的法则&#xff0c;由此就有了进程的调度算法。 python更多源码/资料/解答/教程等 …

练习2:88. 合并两个有序数组

这里写自定义目录标题 题目解体思路代码 题目 给你两个按非递减顺序排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m和 n &#xff0c;分别表示 nums1 和 nums2中的元素数目。 请你合并nums2 到 nums1 中&#xff0c;使合并后的数组同样按非递减顺序排列。 注意&a…

python 笔记(3)——request、爬虫、socket、多线程

目录 1、使用requests发送http请求 1-1&#xff09;发送get请求 1-2&#xff09;发送 post 请求 1-3&#xff09;发送 get 请求下载网络图片 1-4&#xff09;使用 post 上传文件 1-5&#xff09;自动维护 session 的方式 2、使用 os.popen 执行cmd命令 3、基于 beautif…

01_nodejs简介

01 【nodejs简介】 1.前言 Node 的重要性已经不言而喻&#xff0c;很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外&#xff0c;目前最为流行的 Web 开发模式是前后端分离的形式&#xff0c;即前端开发者…

ArrayList、LinkedList、Collections.singletonList、Arrays.asList与ImmutableList.of

文章目录 ListArrayListLinkedListArrayList与LinkedList的区别快速构建list集合Collections.singletonListArrays.asListImmutableList.of Java集合类型有三种&#xff1a;set(集)、list(列表)和map(映射)&#xff0c;而List集合是很常用的一种集合类型&#xff0c; List 我…

2.3 Vector 动态数组(迭代器)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 Vector<T> 动态数组&#xff08;模板语法&#xff09; 本文目标 1 熟悉迭代器设计模式&#xff1b; 2 实现数组的迭代器&#xff1b; 3 基于迭代器的容器遍历&#xff1b; 迭代器语法介绍 对迭…

电影《封神第一部》观后感

本周看了电影《封神第一部》&#xff0c;听说上映的时候&#xff0c;口碑就是非常不错的&#xff0c;算是补档吧&#xff0c;另外看网上的一些评论&#xff0c;也都似乎挺好的&#xff0c;虽然有段时间了&#xff0c;还是决定去看看&#xff0c;其实也是算是逃避新出的电影吧&a…

亚马逊的邮箱可以更改吗,修改亚马逊账户邮箱的方法

亚马逊的邮箱可以更改吗&#xff1f; 可以更改&#xff0c;但更改主户邮箱需要电话对身份进行深度验证。如果需要修改&#xff0c;可以先开case向客服说明情况&#xff0c;然后根据客服的指导步骤来操作即可。 修改亚马逊账户邮箱的方法 1、登录您的账户&#xff1a;打开亚马…

外贸爬虫系统

全球智能搜索 全球智能搜索 支持全球所有国家搜索引擎&#xff0c;及社交平台&#xff0c;精准定位优质的外贸客户&#xff0c;免翻墙 全球任意国家地区实时采集 搜索引擎全网邮箱电话采集 社交平台一键查看采集&#xff08;Facebook,Twitter,Linkedin等&#xff09; 职位…

Android SDK 上手指南||第九章 Manifest文件

第九章 Manifest文件 到目前为止&#xff0c;我们已经熟悉了Android项目中的各个组成部分&#xff0c;包括其资源。在今天的文章中&#xff0c;我们将以项目Manifest文件作为核心内容。 对于一个项目来说&#xff0c;Manifest既可以很简单、也可以很复杂&#xff0c;其具体情…