首页 > 其他分享 >Vue3中使用组合式API通过路由传值详解

Vue3中使用组合式API通过路由传值详解

时间:2025-01-17 18:32:36浏览次数:3  
标签:vue const import API 参数 传值 Vue3 router 路由

在Vue 3中,使用组合式API来传递路由参数是一种常见的需求。Vue Router 是 Vue.js的官方路由管理工具,可以在不同的场景下通过多种方式传递和接收路由参数。下面将详细讲解几种常见的路由传值方式,并提供相应的代码示例。

1. 通过路由参数传值(动态路由参数)

路由参数是一种最常用的传值方式,通常用于 URL 路径中。例如,某个页面需要根据用户 ID 来加载数据。

使用场景:
  • 根据路由参数(如用户ID)显示不同的数据或组件。
代码示例:

定义路由(router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../views/Home.vue';
import UserProfile from '../views/UserProfile.vue';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/user/:id',  // 使用动态路由参数
    name: 'UserProfile',
    component: UserProfile
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

export default router;

传参方式
如果你的路由是命名的,可以使用 name 属性来导航,并传递参数。

import { useRouter } from 'vue-router';
const router = useRouter();
router.push({ name: 'user', params: { id: 123 } })

在组件中使用路由参数(UserProfile.vue

<template>
  <div>
    <h1>User Profile</h1>
    <p>User ID: {{ userId }}</p>
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router';

// 获取路由对象
const route = useRoute();

// 从路由中获取动态参数
const userId = route.params.id;
</script>

访问 URL:

http://localhost:8080/user/123

2. 通过查询参数传值(URL查询字符串)

查询参数通常用于传递不属于路径的一些附加信息,适合用于过滤、分页等场景。

使用场景:
  • 向一个页面传递一些过滤条件、分页信息等。
代码示例:

定义路由(router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import SearchResults from '../views/SearchResults.vue';

const routes = [
  {
    path: '/search',
    name: 'SearchResults',
    component: SearchResults
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

export default router;

传参方式
如果你的路由是命名的,可以使用 name 属性来导航,并传递参数。

import { useRouter } from 'vue-router';
const router = useRouter();
router.push({ path: '/register', query: { plan: 'private' } })

在组件中使用查询参数(SearchResults.vue

<template>
  <div>
    <h1>Search Results</h1>
    <p>Search Query: {{ searchQuery }}</p>
  </div>
</template>

<script setup>
import { useRoute } from 'vue-router';

// 获取查询参数
const route = useRoute();
const searchQuery = route.query.q;
</script>

访问 URL:

http://localhost:8080/search?q=vue3

3. 通过 state 传值(使用 router.pushrouter.replace

通过 router.pushrouter.replace 方法,除了可以传递路径、查询参数外,还可以使用 state 来传递一些临时的状态数据。这种方式非常适合传递一些短期的、不需要在 URL 中显示的值。

使用场景:
  • 在路由跳转时传递一些临时的数据,比如在表单提交后跳转到详情页,并传递表单数据。
代码示例:

跳转时使用 state 传值(在组件中使用 router.push

<template>
  <div>
    <button @click="goToUserProfile">Go to User Profile</button>
  </div>
</template>

<script setup>
import { useRouter } from 'vue-router';

const router = useRouter();

const goToUserProfile = () => {
  router.push({ 
    name: 'UserProfile',
    params: { id: '123' },
    state: { fromDashboard: true }
  });
};
</script>

在目标组件中获取 stateUserProfile.vue

<template>
  <div>
    <h1>User Profile</h1>
    <p>User ID: {{ userId }}</p>
    <p v-if="fromDashboard">Navigated from Dashboard</p>
  </div>
</template>

<script setup>
import { useRoute, useRouter } from 'vue-router';

// 获取路由参数
const route = useRoute();
const userId = route.params.id;

// 获取路由状态
const router = useRouter();
const fromDashboard = router.currentRoute.value.state?.fromDashboard;
</script>

4. 通过 props 传值(配合路由的 props 配置)

Vue Router 支持将路由参数直接作为 props 传递给组件。这对于需要从路由中解耦组件逻辑的情况非常有用。

使用场景:
  • 将路由参数直接作为组件的 props 传递,减少路由与组件之间的耦合。
代码示例:

定义路由(router/index.js

import { createRouter, createWebHistory } from 'vue-router';
import UserProfile from '../views/UserProfile.vue';

const routes = [
  {
    path: '/user/:id',
    name: 'UserProfile',
    component: UserProfile,
    props: true  // 开启 props 传递
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

export default router;

在组件中接收 propsUserProfile.vue

<template>
  <div>
    <h1>User Profile</h1>
    <p>User ID: {{ id }}</p>
  </div>
</template>

<script setup>
// 接收路由参数作为 props
defineProps({
  id: String
});
</script>

5. 总结

在 Vue 3 中,可以通过不同的方式在路由之间传递值,选择哪种方式取决于具体的使用场景:

  • 动态路由参数:适用于需要根据 URL 动态改变内容的场景。
  • 查询参数:适用于传递额外的过滤条件或分页信息。
  • state:适用于传递不需要展示在 URL 中的临时数据。
  • props:适用于将路由参数直接作为组件的 props,简化组件的逻辑。

这些传值方法可以根据实际需求组合使用,以提供更灵活的路由管理和数据传递机制。

标签:vue,const,import,API,参数,传值,Vue3,router,路由
From: https://blog.csdn.net/cuijiying/article/details/145188491

相关文章

  • Flink (九):DataStream API (六) Process Function
    1.ProcessFunctionProcessFunction 是一种底层的流处理操作,基于它用户可以访问(无环)流应用程序的所有基本构建块事件(流元素)状态(容错,一致性,仅在keyedstream上)定时器(事件时间和处理时间,仅在keyedstream上)可以将 ProcessFunction 视为一种可以访问keyedstate和定时......
  • Vue3初学之Element-plus Form表单
    1.使用el-form组件el-form是一个表单容器,可以包含多个el-form-item,每个el-form-item包裹具体的表单控件,如输入框、选择器、日期选择器等。<template><el-form:model="form"label-width="120px"><el-form-itemlabel="用户名"><el-inputv-mod......
  • 对接美团外卖霸王餐api接口需要考虑那些因素
    美团外卖霸王餐是美团平台上推出的一种营销活动,用户可以通过参与此活动以极低的价格甚至免费获得外卖餐品。这种活动通常由商家为了宣传或提高知名度而赞助。对于商家来说,霸王餐是一种有效的营销手段,可以增加销量、提升店铺评分和品牌曝光度。对于消费者而言,参与霸王餐活动可......
  • 餐饮行业点餐API接口对接开发详细介绍
    一、点餐API接口的核心功能1.菜单管理允许餐厅管理员或员工通过API添加、编辑、删除菜单项。支持设置菜单项的价格、描述、图片等属性。2.订单处理顾客可以通过API提交订单,包括选择菜品、数量、特殊要求等。餐厅端可以接收、查看、确认或拒绝订单。3.支付集成API可以与......
  • Flink(八):DataStream API (五) Join
    1. WindowJoinWindowjoin作用在两个流中有相同key且处于相同窗口的元素上。这些窗口可以通过 windowassigner 定义,并且两个流中的元素都会被用于计算窗口的结果。两个流中的元素在组合之后,会被传递给用户定义的 JoinFunction 或 FlatJoinFunction,用户可以用它们输......
  • RestAPI实现聚合
    API语法聚合条件与query条件同级别,因此需要使用request.source()来指定聚合条件。聚合的结果解析:@OverridepublicMap<String,List<String>>filters(RequestParamsparams){try{//1.准备RequestSearchRequestrequest=newSearchRequest("h......
  • 关于vue3 路由离开前 更新pinia 导致页面watch被触发 解决方法
    背景:在vue中,使用watch监听pinia中的数据是否变化来调用apiwatch(()=>{return[pinia.data,]},(newV,oldV)=>{axios.get('a.b',params).then((response)=>{........});},{immediate:true})在监听piniadata的时候,如......
  • 老照片修复API——老照片修复、老照片上色,修复划痕、斑点
    老照片修复:让记忆重现光彩随着数字化技术的飞速发展,老照片的修复已经不再是一个费时费力的任务。许多人怀念过去的时光,希望能够将珍贵的老照片修复,保存那些珍贵的记忆。今天,我们的网站提供了一款高效的老照片修复API,致力于让用户轻松修复老照片,恢复过去的美好瞬间。传统......
  • webpack5 从零搭建 vue3 项目
    目前vue3官网推荐的工具链已经是vite了,就算是要使用webpack甚至是webpack5,也可以直接使用vue-cli。然而之所以写这个,可以当是webpack5的一个学习文章。同时也是因为之前有个项目是在vue3刚出来的时候使用vue-cli(那是官网还是推荐使用webpack,以及但是得版本为webp......
  • [Babel] Intro Babel - 05. API
    APIs关于babel里面的APIs主要位于@babel/core这个依赖里面,你可以在官网左下角的ToolingPackages分类下找到这个依赖包。这里顺便介绍一下每一种依赖包的作用:@babel/parser:是Babel的解析器,用于将源代码转换为AST。@babel/core:Babel的核心包,它提供了Babel的......