vue-router学习3:路由传参方式

本文详细介绍了VueRouter中query传参和params传参的配置方法,以及在组件间传递参数的方式,强调了params传参在路径中的持久性和query传参的可选性。
摘要由CSDN通过智能技术生成

路由传参的方式主要有两种:query传参和params传参。

1. Query 传参

首先,在路由配置文件中(通常是 router/index.ts),定义你的路由:

import { createRouter, createWebHistory } from 'vue-router';  
import Home from '../views/Home.vue';  
import Search from '../views/Search.vue';  
  
const routes = [  
  {  
    path: '/',  
    name: 'Home',  
    component: Home  
  },  
  {  
    path: '/search',  
    name: 'Search',  
    component: Search  
  }  
];  
  
const router = createRouter({  
  history: createWebHistory(process.env.BASE_URL),  
  routes  
});  
  
export default router;

然后,在组件中导航到带查询参数的路由:

<template>  
  <button @click="goToSearch">Go to Search</button>  
</template>  
  
<script lang="ts">  
import { defineComponent } from 'vue';  
import { useRouter } from 'vue-router';  
  
export default defineComponent({  
  setup() {  
    const router = useRouter();  
  
    const goToSearch = () => {  
      router.push({ name: 'Search', query: { keyword: 'vue3' } });  
    };  
  
    return { goToSearch };  
  },  
});  
</script>

在目标组件 Search.vue 中接收查询参数:

<template>  
  <div>  
    <p>Search for: {{ searchKeyword }}</p>  
  </div>  
</template>  
  
<script lang="ts">  
import { defineComponent, computed } from 'vue';  
import { useRoute } from 'vue-router';  
  
export default defineComponent({  
  setup() {  
    const route = useRoute();  
    const searchKeyword = computed(() => route.query.keyword);  
  
    return { searchKeyword };  
  },  
});  
</script>

2. Params 传参

在路由配置中,你需要为 params 预留位置:

const routes = [  
  // ...其他路由  
  {  
    path: '/user/:id',  
    name: 'User',  
    component: User  
  }  
];

导航到带参数的路由:

<template>  
  <button @click="goToUser">Go to User</button>  
</template>  
  
<script lang="ts">  
import { defineComponent } from 'vue';  
import { useRouter } from 'vue-router';  
  
export default defineComponent({  
  setup() {  
    const router = useRouter();  
  
    const goToUser = () => {  
      router.push({ name: 'User', params: { id: 123 } });  
    };  
  
    return { goToUser };  
  },  
});  
</script>

在目标组件 User.vue 中接收参数:

<template>  
  <div>  
    <p>User ID: {{ userId }}</p>  
  </div>  
</template>  
  
<script lang="ts">  
import { defineComponent, computed } from 'vue';  
import { useRoute } from 'vue-router';  
  
export default defineComponent({  
  setup() {  
    const route = useRoute();  
    const userId = computed(() => route.params.id);  
  
    return { userId };  
  },  
});  
</script>

注意:  使用 params 传参时,路径中的参数部分是必须的,并且刷新页面后参数不会丢失,因为它们被包含在了 URL 路径中。而 query 传参的参数在 URL 的查询字符串中,可以自由选择是否包含,但刷新页面后参数依然会保留,除非用户手动更改或清除 URL。

  • 13
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: vue-router4报错:无效的导航守卫。 在Vue Router4中,导航守卫是一种可以在路由导航发生前、后或者跳转被拒绝时进行控制的方法。当我们在使用导航守卫时,如果出现"invalid navigation guard"的错误提示,可能是由于以下几个原因引起的: 1. 在定义导航守卫时,函数的参数个数错误。在Vue Router4中,导航守卫的函数参数个数是严格规定的,不允许多传或者少传参数。例如,如果我们定义了一个全局前置守卫beforeEach: ``` router.beforeEach((to, from, next) => { // ... }) ``` 那么参数to表示目标路由对象,from表示当前路由对象,next是一个函数,必须调用该函数以确定路由导航的继续。 2. 在给导航守卫传递的参数类型不正确。导航守卫的参数有类型限制,必须按照规定的类型传参。比如beforeEach的参数要求to和from都是RouteLocationNormalized类型,next是NavigationGuardNext类型。 3. 在使用导航守卫时,调用了一个未定义的守卫函数。Vue Router4中的导航守卫有多种类型,如beforeEach、beforeResolve、afterEach等,每种守卫函数都有其特定的用途。如果我们在使用守卫时调用了一个未被Vue Router4定义的守卫函数,就会出现"invalid navigation guard"的错误。 要解决"invalid navigation guard"错误,我们需要仔细检查导航守卫的定义和使用,确保守卫函数参数个数、类型和守卫函数的调用都符合Vue Router4的要求。此外,我们还可以参考Vue Router4的官方文档,对导航守卫有更深入的了解,并按照文档的要求正确地使用守卫函数。 ### 回答2: vue-router4的错误“invalid navigation guard”通常发生在路由导航守卫中出现问题时。 路由导航守卫是vue-router中用于控制路由跳转的钩子函数,包括beforeEach、beforeResolve、afterEach等。当路由跳转时,会依次执行各个导航守卫的回调函数。 出现“invalid navigation guard”错误的原因可能有以下几点: 1. 自定义的导航守卫回调函数中出现了错误。 检查自定义导航守卫函数中的语法问题或逻辑错误,如函数调用错误、未定义的变量等。 2. 导航守卫回调函数的参数传递错误。 导航守卫回调函数的参数包括to、from和next,确保正确地传递了这些参数。 3. 导航守卫的使用方式不正确。 在vue-router4中,导航守卫的使用方式与之前版本略有不同。确定你按照新版本的使用方式编写了导航守卫。 4. 导航守卫回调函数中使用了异步操作。 vue-router4中的导航守卫回调函数是同步执行的,不支持使用异步操作。如果在导航守卫中需要进行异步操作,可以使用async/await或Promise。 解决这个错误的方法如下: 1. 检查自定义的导航守卫回调函数中是否存在语法或逻辑错误。 2. 确保正确地传递了导航守卫函数的参数。 3. 检查导航守卫的使用方式是否符合vue-router4的规范。 4. 如有必要,将导航守卫回调函数中的异步操作改为同步操作。 总结 “invalid navigation guard”错误是vue-router4中出现的错误,通常是由于路由导航守卫的问题导致的。检查并修复导航守卫的相关代码可以解决这个错误。 ### 回答3: 在Vue Router 4中,当使用导航守卫时,可能会遇到"invalid navigation guard"的错误。这个错误通常是由于在导航守卫中使用了无效的函数或参数引起的。 在Vue Router 4中,有三种导航守卫:全局前置守卫、路由独享守卫和组件内守卫。当我们使用这些守卫时,需要确保函数或参数的正确性。 首先,要检查导航守卫函数的定义和使用是否正确。全局前置守卫是在路由配置中定义的函数,而路由独享守卫是在路由对象中定义的函数。确保这些函数的名称、参数和返回值符合Vue Router的要求。 其次,要检查导航守卫函数中使用的参数是否正确。导航守卫函数通常接受三个参数: to、 from和next。to表示要导航到的目标路由对象,from表示当前路由对象,next是一个函数,用于控制导航行为。确保这些参数的使用和传递正确无误。 最后,还要检查导航守卫函数的逻辑是否正确。根据具体需求,我们可以在导航守卫中执行一系列的操作,如验证用户权限、重定向到其他路由等。确保这些逻辑的执行顺序和结果符合预期。 总之,在使用Vue Router 4时,如果遇到"invalid navigation guard"的错误,我们需要仔细检查导航守卫函数的定义、参数使用以及逻辑执行,以确保它们的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值