Vue路由跳转传参

该部分内容即官方文档中的“编程式导航”

vue路由传参是在路由跳转时传递参数。

传参方式分为params和query。

params传参分为url中显示参数和不显示参数两种方式。

官方文档

本部分内容为官方文档中编程式导航的 router.push() 部分。

router.replace() 的用法同 router.push() ,唯一区别就是replace不会向history中添加记录。

router.go() 用法同 window.history.go(n)

1. 通过path匹配路径:

1. 通过占位符传参
getDetail(val: unknown): void {
   this.$router.push({ path: `/getUserDetail/${val}` });
	 // this.$router.push({ path: `/getUserDetail`, params: { ip: val });  // 无效
}
const routes: Array<RouteConfig> = [
  {
    path: "/getUserDetail/:ip",
    name: "UserDetail",
    component: () => import("@/views/user/detail.vue")
  }
];

URL:http://localhost:8081/getUserDetail/180.84.50.155

注意:如果使用了path,再搭配使用params,此时params不会生效。

2. 通过query传参
getDetail(val: unknown): void {
  this.$router.push({ path: "/getUserDetail", query: { ip: val } });
}
const routes: Array<RouteConfig> = [
  {
    path: "/getUserDetail",
    name: "UserDetail",
    component: () => import("@/views/user/detail.vue")
  }
];
<!-- 参数会被收集到$route.query中 -->
<div>参数为:{{ this.$route.query.ip }}</div>

URL展示:http://localhost:8081/getUserDetail?ip=41.4.208.105

2. 通过name匹配路径:

1. 通过params传参
this.$router.push({ name: "UserDetail", params: { ip: val } });
// 路由配置中一种是带 :xxx 占位,不丢参数
const routes: Array<RouteConfig> = [
  {
    path: "/getUserDetail/:ip",
    name: "UserDetail",
    component: () => import("@/views/user/detail.vue")
  }
];

URL展示:http://localhost:8081/getUserDetail/245.97.154.234

// 路由配置中另一种是不带 :xxx 占位。不带占位会出现的问题是,再次刷新的时候,丢参数!!!
const routes: Array<RouteConfig> = [
  {
    path: "/getUserDetail",
    name: "UserDetail",
    component: () => import("@/views/user/detail.vue")
  }
];

URL展示:http://localhost:8081/getUserDetail

<!-- 参数会被收集到$route.params -->
<div>参数为:{{ this.$route.params.ip }}</div>

注意:不带 :xxx 占位path路径,会出现再次刷新的时候丢参数的问题。

2. 通过query传参
this.$router.push({ name: "UserDetail", query: { ip: val } });
const routes: Array<RouteConfig> = [
  {
    path: "/getUserDetail",
    name: "UserDetail",
    component: () => import("@/views/user/detail.vue")
  }
];

URL展示:http://localhost:8081/getUserDetail?ip=216.130.44.129

<!-- 参数会被收集到$route.query中 --> 
<div>参数为:{{ this.$route.query.ip }}</div>

3. 总结

以上是编程式导航的写法。对于声明式导航,即 to后边的内容也是以上1和2的写法。

1和2中 是从$route中获取参数,也可以通过props进行接收。代码如下:

this.$router.push({ path: `/getUserDetail/${ip}` });
{
  path: "/getUserDetail/:ip",
  name: "UserDetail",
  props: true,	// 开启props
  component: () => import("@/views/user/detail.vue")
}
<template>
  <!-- <div>参数为:{{ this.$route.params.ip }}</div> -->
  <!-- <div>参数为:{{ this.$route.query.ip }}</div> -->
  <div>参数为:{{ ip }}</div>
</template>
<script lang="ts">
import { Vue, Component, Prop } from "vue-property-decorator";
@Component({})
export default class NAME extends Vue {
  @Prop() ip!: string;
}
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小于___

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值