vue常用的路由传参的实现方式

本文详细介绍了在Vue.js中使用两种不同的方式来传递参数:一种是通过name和params,另一种是通过path和query。通过具体代码示例展示了如何在组件间进行参数的传递和接收,适用于需要在不同页面间传递数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式一:通过nameparams传递参数。

首先看一下效果:
在这里插入图片描述

在当前页面中:

<template>
  <div>
    <TestNum msg="测试页面" />
    <button @click="gogo">跳转</button>
  </div>
</template>

<script>
import TestNum from '@/components/textNum.vue'
export default {
  name: 'Test',
  components: {
    TestNum
  },
  methods: {
    gogo () {
      this.$router.push({
        name: 'Skip',
        params: {
          name: '张三',
          age: 22,
          sex: '男',
          id: 1
        }
      })
    }
  }
}
</script>

跳转到指定页面后:

<template>
  <div>
    <p>你跳转到了当前页面</p>
    <button @click="ret">返回</button>
    <button @click="param">获取传递的参数</button>
    <p>名字: {{name}}</p>
    <p>年龄: {{age}}</p>
    <p>性别: {{sex}}</p>
    <p>名字id: {{id}}</p>
  </div>
</template>

<script>
export default {
  data () {
    return {
      name: '',
      age: '',
      sex: '',
      id: ''
    }
  },
  methods: {
    ret () {
      this.$router.push('/Test')
    },
    param () {
      var params = this.$route.params
      this.name = params.name
      this.age = params.age
      this.sex = params.sex
      this.id = params.id
    }
  }
}
</script>

方式二:通过pathquery传递参数

将上方代码中的nameparams替换成pathquery就可以了,

在当前页面中如下:

methods: {
    gogo () {
      this.$router.push({
        path: '/Skip',
        query: {
          name: '张三',
          age: 22,
          sex: '男',
          id: 1
        }
      })
    }
  }

在跳转后的页面如下:

param () {
      var params = this.$route.query
      this.name = params.name
      this.age = params.age
      this.sex = params.sex
      this.id = params.id
    }
### 在 Vue3 中通过路由获取 Query 参数 在 Vue3 的项目中,可以通过 `useRoute` 方法从 Composition API 中获取当前的路由实例,并从中提取 Query 参数。以下是具体的实现方法: #### 示例代码 以下是一个完整的示例,展示了如何在组件中获取和监听 Query 参数: ```vue <template> <div> <p>Query Parameter ID: {{ queryId }}</p> <p>Query Parameter Name: {{ queryName }}</p> </div> </template> <script> import { useRoute, onBeforeRouteUpdate } from 'vue-router'; import { ref, watchEffect } from 'vue'; export default { setup() { const route = useRoute(); // 初始化 Query 参数 const queryId = ref(route.query.id || ''); const queryName = ref(route.query.name || ''); // 监听 Query 参数的变化 watchEffect(() => { queryId.value = route.query.id || ''; queryName.value = route.query.name || ''; }); // 处理路由更新事件(可选) onBeforeRouteUpdate((to) => { queryId.value = to.query.id || ''; queryName.value = to.query.name || ''; }); return { queryId, queryName, }; }, }; </script> ``` 以上代码实现了以下几个功能: 1. **初始化 Query 参数**:通过 `route.query` 获取初始的 Query 参数值[^1]。 2. **动态监听参数变化**:利用 `watchEffect` 自动追踪 `route.query` 的变化并实时更新响应式变量[^3]。 3. **处理路由切换时的参数更新**:通过 `onBeforeRouteUpdate` 捕获路由更新事件,确保在路由切换时能够同步最新的 Query 参数[^4]。 --- ### 类型标注(可选) 为了进一步提升代码的质量和可维护性,建议为 Query 参数添加类型标注。以下是基于 TypeScript 的实现方式: #### 添加类型定义 ```typescript // 定义 Query 参数的类型 interface RouteQueryParams { id?: string; name?: string; } ``` #### 修改代码以支持类型安全 ```vue <script lang="ts"> import { defineComponent, ref, watchEffect } from 'vue'; import { useRoute, RouteLocationNormalizedLoaded } from 'vue-router'; export default defineComponent({ setup() { const route = useRoute(); // 使用类型断言指定 Query 参数的类型 const queryParams = route.query as unknown as RouteQueryParams; const queryId = ref(queryParams.id ?? ''); const queryName = ref(queryParams.name ?? ''); watchEffect(() => { const updatedQueryParams = route.query as unknown as RouteQueryParams; queryId.value = updatedQueryParams.id ?? ''; queryName.value = updatedQueryParams.name ?? ''; }); return { queryId, queryName, }; }, }); </script> ``` 此部分代码引入了 TypeScript 的接口定义,明确了 Query 参数的结构,从而增强了代码的安全性和可读性[^4]。 --- ### 总结 通过上述方法,可以在 Vue3 中轻松获取和监听路由的 Query 参数。无论是简单的场景还是复杂的类型化需求,都可以找到合适的解决方案。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值