Vue3路由的使用

news2024/11/14 6:18:35

文章目录

  • 1. 路由的集成和使用
  • 2. 声明式导航
  • 3. 编程式导航
  • 4. 获取页面路由参数数据
    • 4.1 动态路由传参和query传参
    • 4.2 编程式导航传参
  • 5. router-view和keepAlive、transition结合


1. 路由的集成和使用

安装:

yarn add vue-router@4

创建 router 目录,并在其下面创建 index.js 文件:

// vue-router中提供3种的路由模式
import { createWebHistory, createRouter } from 'vue-router'

const routes = [
  {
    path: '/',
    component: () => import('@/views/home.vue'),
  },
  {
    path: '/about',
    component: () => import('@/views/about.vue'),
  }
]

const router = createRouter({
  // 路由的模式
  history: createWebHistory(),
  // 路由规则
  routes
})

export default router

在 main.js 文件中引入路由:

// 整个应用支持路由
app.use(router)

在 App 组件中挂载路由:

<template>
  <router-view />
</template>

<script setup>
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

2. 声明式导航

<template>
  <div>
    <!-- 
      RouterLink它默认编译生成的html标签为 a
      router@4它没有属性 tag 来指定生成后的html标签
    -->
    <RouterLink active-class="active" to="/">home</RouterLink> --
    <!-- vue-router@4版本中如果你要自定义编译后的html标签,你需要通过插槽来完成 v-slot及 custom 同时使用 -->
    <RouterLink to="/about" custom v-slot="{ route, navigate, isActive }">
      <h3 :class="{ active: isActive }" @click="navigate">about</h3>
    </RouterLink>
    <hr>
    <router-view />
  </div>
</template>

<script setup>
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

<router-link> 通过一个作用域插槽暴露底层的定制能力。这是一个更高阶的 API,主要面向库作者,但也可以为开发者提供便利,大多数情况下用在一个类似 NavLink 这样的组件里。

注意

记得把 custom 配置传递给 <router-link>,以防止它将内容包裹在 <a> 元素内。

<router-link
  to="/about"
  custom
  v-slot="{ href, route, navigate, isActive, isExactActive }"
>
  <NavLink :active="isActive" :href="href" @click="navigate">
    {{ route.fullPath }}
  </NavLink>
</router-link>
  • href:解析后的 URL。将会作为一个 <a> 元素的 href 属性。如果什么都没提供,则它会包含 base
  • route:解析后的规范化的地址。
  • navigate:触发导航的函数。 会在必要时自动阻止事件,和 router-link 一样。例如:ctrl 或者 cmd + 点击仍然会被 navigate 忽略。
  • isActive:如果需要应用 active class,则为 true。允许应用一个任意的 class。
  • isExactActive:如果需要应用 exact active class,则为 true。允许应用一个任意的 class。

3. 编程式导航

<template>
  <div>
    <button @click="goHome">到首页</button>
    <hr>
    <router-view />
  </div>
</template>

<script setup>
// 在setup中使用hook函数来得到路由对象,完成编程式导航
import { useRouter } from 'vue-router'
const router = useRouter()

const goHome = () => {
  router.push('/')
}
</script>

<style lang="scss" scoped>

</style>

在这里插入图片描述

4. 获取页面路由参数数据

路由规则表:

// vue-router中提供3种的路由模式
import { createWebHistory, createRouter } from 'vue-router'

const routes = [
  {
    path: '/',
    component: () => import('@/views/home.vue'),
  },
  {
    path: '/about',
    component: () => import('@/views/about.vue'),
  },
  {
    // 带有动态路由参数的路由
    path: '/detail/:id',
    component: () => import('@/views/detail.vue')
  }
]

const router = createRouter({
  // 路由的模式
  history: createWebHistory(),
  // 路由规则
  routes
})

export default router

4.1 动态路由传参和query传参

home 页面:

<template>
  <div>
    <h3>首页页面</h3>
    <ul>
      <!-- 通过编程式导航传参 -->
      <li v-for="item of films" :key="item.filmId">
        <!-- 对象方式 query 传参 -->
        <RouterLink :to="{ path: `/detail/${item.filmId}`, query: { name: 'lisi' } }">{{ item.name }}</RouterLink>
        <!-- 问号方式 query 传参 -->
        <!-- <RouterLink :to="`/detail/${item.filmId}?name=zhangsan`">{{ item.name }}</RouterLink> -->
      </li>
    </ul>
  </div>
</template>

<script setup>
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import axios from 'axios'

const router = useRouter()

const films = ref([])

onMounted(async () => {
  let ret = await axios.get('/api/v1/getNowPlayingFilmList?cityId=110100&pageNum=1&pageSize=10')
  films.value = ret.data.data.films
})
</script>

<style lang="scss" scoped>

</style>

详情页面:

<template>
  <div>
    <h3>详情页面 - {{ id }} - {{ name }}</h3>
    <button>收藏</button>
  </div>
</template>

<script setup>
// 获取页面路由中的参数数据
import { useRoute } from 'vue-router'
// 通过hook函数获取页面路由中的数据
const route = useRoute()

// 获取动态路由参数
const id = route.params.id
// 获取query字符串
const name = route.query.name
</script>

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

在这里插入图片描述

4.2 编程式导航传参

home 页面:

<template>
  <div>
    <h3>首页页面</h3>
    <ul>
      <!-- 通过编程式导航传参 -->
      <li v-for="item of films" :key="item.filmId" @click="goDetail(item.filmId)">
        {{item.name}}
      </li>
    </ul>
  </div>
</template>

<script setup>
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import axios from 'axios'

const router = useRouter()

const films = ref([])

onMounted(async () => {
  let ret = await axios.get('/api/v1/getNowPlayingFilmList?cityId=110100&pageNum=1&pageSize=10')
  films.value = ret.data.data.films
})

const goDetail = id => {
  router.push(`/detail/${id}?name=zhangs@an`)
}
</script>

<style lang="scss" scoped>

</style>

详情页面:

<template>
  <div>
    <h3>详情页面 - {{ id }} - {{ name }}</h3>
    <button>收藏</button>
  </div>
</template>

<script setup>
// 获取页面路由中的参数数据
import { useRoute } from 'vue-router'
// 通过hook函数获取页面路由中的数据
const route = useRoute()

// 获取动态路由参数
const id = route.params.id
// 获取query字符串
const name = route.query.name
</script>

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

在这里插入图片描述

5. router-view和keepAlive、transition结合

注意:要用 router-view 包裹 keepAlive。

<template>
  <button @click="goHome">到首页</button>
  <!-- 在vue-router@4版本中,使用keepAlive需要用到插槽 -->
  <router-view v-slot="{ Component, route }">
    <transition appear mode="out-in" name="v">
      <keep-alive>
        <component :is="Component" />
      </keep-alive>
    </transition>
  </router-view>
</template>

<script setup>
// 在setup中使用hook函数来得到路由对象,完成编程式导航
import { useRouter } from 'vue-router'
const router = useRouter()

const goHome = () => {
  router.push('/')
}
</script>

<style lang="scss" scoped>
/* 在进场和退场的过程中,进行透明度的变化 */
.v-enter-active,
.v-leave-active {
  transition: opacity 0.6s ease;
}

/* 进场开始和退场的结束 */
.v-enter-from,
.v-leave-to {
  opacity: 0;
}
</style>

在这里插入图片描述

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

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

相关文章

传奇单机架设教程,五分钟完成单机架设

准备工具:DBC2000 版本 补丁 传奇架设步骤 1.解压补丁到传奇客户端 2.解压版本到D盘盘符 3.安装配置DBC2000 4.打开引擎控制器启动 5.打开登陆器选择单机127.0.0.1 确保自己的热血传奇客户端是16年以后的 最好是最新版的. 不要使用已经淘汰的10周年客户端 …

Windows技巧之注册表

介绍 注册表是Windows操作系统中的一个核心数据库&#xff0c;其中存放着各种参数&#xff0c;直接控制着Windows的启动、硬件驱动程序的装载以及一些Windows应用程序的运行&#xff0c;从而在整个系统中起着核心作用。这些作用包括了软、硬件的相关配置和状态信息&#xff0c…

这便是智能

🍿*★,*:.☆欢迎您/$:*.★* 🍿

复制集群架构设计技巧

Redis Sentinel设计技巧 Redis Sentinel基本架构 Monitoring Sentinel可以监控Redis节点的状态 Notification Sentinel可以通过API进行集群状态通知 Automatic failover Sentinel实现故障自动切换 Configuration provider Sentinel为client提供发现master节点的发现功能…

WebDAV之葫芦儿·派盘+i简记

i简记 支持webdav方式连接葫芦儿派盘。 每天都去记录生活中所消费的琐碎开支,不仅浪费时间,还有很多广告和理财推销。那有没有纯粹的手机在线记账工具?可以轻松把微信、支付宝账单导入,支持外账入内,还有汇率转换等?答案是肯定的,i简记就是非常实用的在线记账工具。 i…

SwiftUI——如何使用新的NavigationStack和NavigationSplitView(如何页面跳转2.0以及如何制作侧栏)

从 iOS 16 开始&#xff0c;苹果开始弃用原先的NavigationView&#xff0c;以后会逐渐完全淘汰掉。现在开始使用NavigationStack和NavigationSplitView。NavigationStack的效果和原本的NavigationView一样&#xff0c;而NavigationSplitView则和现在 iPadOS 上的NavigationView…

Elastic Search(一)

1. elasticsearch 概述 1.1 简介 官网: https://www.elastic.co/ Elasticsearch (简称ES)是一个分布式、RESTful 风格的搜索和数据分析引擎&#xff0c;能够解决不断涌现出的各种用例。 查询和分析 可以自定义搜索方式: 通过 Elasticsearch&#xff0c;您能够执行及合并多种…

TAPD项目管理:工作流自动化最佳实践

TAPD全称为腾讯敏捷产品研发平台&#xff0c;凝聚了腾讯内部各个产品体系多年敏捷开发的实践精髓。TAPD的【自动化助手】模块通过【触发条件】【执行条件】的规则设定&#xff0c;可以轻松实现自定义子需求、父需求、缺陷管理之间的流转和自动化。 产品/研发的日常工作中&…

mybatis-plus通过inSql实现子查询以及运算符

mybatis-plus通过inSql实现子查询以及运算符一、Controller二、Service1、子查询Service2、运算符Service三、结果一、Controller GetMapping("/queryProductByTypes")public List<ProductDTO> queryProductByTypes(RequestParam("types") List<S…

C数据结构-堆的实现思路和堆排序的实现

堆和堆排堆的定义为什么使用数组&#xff1f;堆接口函数的实现堆的初始化堆的销毁堆的打印堆的插入&#xff01;&#xff01;堆的删除&#xff01;&#xff01;堆的判空返回堆顶的元素堆的大小堆排序的实现&#xff01;&#xff01;实现堆排序的两种方式时间复杂度的分析Last前…

【STC8A8K64D4开发板】——STC8A8K64D4开发板介绍

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请附上原文出处链接。 文章目录前言一、STC8A8K64D4系列单片机介绍二、STC8A8K64D4开发板概述三、STC8A8K64D4开发板硬件框图四、STC8芯片命名规则五、STC8A8K64D4核心板-2款对比六、STC8A8K64D4开发板-功能描述七、STC…

肠道微生物群与过敏性鼻炎

过敏性鼻炎是个全球性健康问题&#xff0c;易反复发作&#xff0c;困扰着全世界大约着4亿人。自20世纪60年代以来&#xff0c;过敏性鼻炎的患病率持续上升。近几年&#xff0c;我国主要大中城市过敏性鼻炎的平均患病率从11.1%升高到17.6%。 过敏性鼻炎主要临床表现包括发痒、打…

相比Superset和Metabase,DataEase开源工具为什么更易用?

企业业务环境或应用环境中产生的数据大多存储在数据库中&#xff0c;但是这些数据无法直接、形象地加以展示。数据可视化的意义就在于将原始数据通过不同类型的图形进行展示&#xff0c;为数据分析提供更加具象化的手段&#xff0c;这是数据可视化分析工具诞生的使命和意义。 …

[足式机器人]Part3机构运动微分几何学分析与综合Ch02-1 平面机构离散运动鞍点综合——【读书笔记】

本文仅供学习使用 本文参考&#xff1a; 《机构运动微分几何学分析与综合》-王德伦、汪伟 《微分几何》吴大任 Ch02-1 平面机构离散运动鞍点综合2 平面运动微分几何学2.1 平面离散运动的矩阵表示2.2 鞍点规划2 平面运动微分几何学 平面连杆机构由连架杆、机架和连杆组成&#…

运筹说 第73期 | 图论创始人“数学之王”一 欧拉

前面我们介绍了有关动态规划的相关内容&#xff0c;相信大家也都有了一些收获&#xff0c;下面我们学习的列车继续驶往“图与网络分析”的站点&#xff0c;在本次文章中我们将一起走近图论的奠基人——欧拉Leonhard Euler&#xff0c;希望能给大家学习运筹学的旅程中带来不一样…

甘露糖-聚乙二醇-6-羧甲基荧光素mannose-PEG-6-FAM

甘露糖-聚乙二醇-6-羧甲基荧光素mannose-PEG-6-FAM 中文名称&#xff1a;甘露糖-6-羧甲基荧光素 英文名称&#xff1a;mannose-6-FAM 别称&#xff1a;6-羧甲基荧光素标记甘露糖&#xff0c;6-羧甲基荧光素-甘露糖 PEG分子量可选&#xff1a;350、550、750、1k、2k、34k、5…

互联网基础结构发展的三个阶段及其特点

互联网的基础结构大体上经历了三个阶段的演进。但这三个阶段在时间划分上并非截然分开而是有部分重叠的&#xff0c;这是因为网络的演进是逐渐的而不是在某个日期突然发生了变化。 第一个阶段是从单个网络ARPANET向互连网方向发展。这一阶段的主要特点是TCP/IP协议初步成型。1…

Apollo 应用与源码分析:CyberRT-protobuf

目录 概念 特点 优点 缺点 文件的创建 1.字段规则 2.数据类型 3.字段名称 4.字段编号 文件的编译 protobuf 编译命令编译 protobuf cmake 方式编译 使用bazel 编译 在protobuf 文件夹下创建build 文件 代码解释&#xff1a; 样例 protobuf 使用文件 代码解释…

Python:入门与基本语法

目录 一、Python环境 官方下载 Python开发工具 插件安装 二、基本数据类型 动态语言的体现 静态语言的体现 弱语言的体现 强语言的体现 三、基本数据类型 java八大基本数据类型 Python四大基本数据类型 案例 基本数据类型 test01 源码 引用数据类型 列表 test02 源码…

你不知道的SQL语言数据库原理

1、SQL的概述 SQL全称&#xff1a; Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。 SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统SystemR上实现。 美国国家标准局(AN…