Vue router 重定向 redirect 如何传值

配置 vue_router 时, 很经常就用到重定向(redirect)功能
例如:
没登录重定向到登录页面(导航卫士拦截也是高效的登录检查方法)
index, home, house 重定向到首页等




重定向 redirect 可接受的值

字符串

字符串作为 path 传入, 相当于 { path: redirect }

{
	...
	redirect: "/assets/assetsIndex",
	...
}
// 相当于
{
	...
	redirect: { path: '/assets/assetsIndex' },
	...
}

对象

先判断有没有 name
有 name
发起跳转处提供的 name, query, hash, params 会往下传
如果 redirect 也提供了这些属性则用 redirect 提供的往下传

redirect: {
	name: 'assetsIndex',
	params: { id: 'redirect' },
}
// redirect 提供了 params, 目标组件可以收到该 params 数据
// redirect 没有提供, 目标组件收到发起跳转处的数据(发起跳转是有数据的话)

没有 name, 就找 path
计算后的 path 和 query, hash 会往下传
如果 redirect 也提供了这些属性则用 redirect 提供的往下传

redirect: {
	path: 'assetsIndex',
	query: { id: 'redirect' },
}

方法

方法必须 return 一个字符串
return 的内容最终作为 path 往下传
所以提供的 params 将无效

redirect: function (to) {
	return 'assetsIndex'
}



这些不需要传参的情况, 直接设置为目标地址的字符串就可以

{
	path: "/assets",
	component: layout,
	redirect: "/assets/assetsIndex",
}

如果你遇到的需求需要传值的话, 可以参考下面的方法




query 带参跳转

query 直接带参就可以了, 缺点是地址中会暴露参数

// 发起跳转
this.$router.push({ name: 'assets', query: { val: 'val值' } })
/* or */
this.$router.push({ path: '/assets', query: { id: '编程式_id' } })
/* or */
this.$router.push("/assets?id=编程式_id")

// 重定向
{
	path: "/assets",
	name: "assets",
	redirect: "/assetsHome",
}

// 目标路由
{
	path: "/assetsHome",
	component: assetsHome,
},

// 目标组件中取值
this.$route.query



params 带参跳转

params 带参相对麻烦, 因为"如果提供了 path,params 会被忽略"在 redirect 中也是成立的
所以我们可以知道, 不可以用 path 来设置路由
而 params 带参的好处当然就是可以在地址隐藏参数了

// 发起跳转
this.$router.push({ name: 'assets', params: { id: '编程式_id' } })

// 重定向
{
	path: "/assets",
	name: "assets",
	redirect: { name: 'assetsHome' },
}

// 目标路由
{
	path: "/assetsHome",
	name: "assetsHome",
	component: assetsHome,
}

// 目标组件中取值
this.$route.params



动态路径带参跳转

本来是不想写这个方法的, 因为笔者本来就很讨厌动态路径带参, 觉得那个方法局限性太大, 加一个参数很麻烦, 还要顺序要求
为了不要被读者吐槽我懒(敲代码本来就是为了偷懒嘛), 还是稍微写一下

// 发起跳转
this.$router.push({ path: '/assets/编程式_id' })

// 重定向
{
	path: "/assets/:id",
	name: "assets",
	redirect: { name: 'assetsHome' },
}

// 目标路由
{
	path: "/assetsHome/:id",
	name: "assetsHome",
	component: assetsHome,
}

// 目标组件中取值
this.$route.params



[题外话] 重定向和别名的区别

重定向是进入 a, 然后自动跳转到 b
a 和 b 都是真实的路由地址, 这个过程经过两地址, 只是 a 不会被记录

别名是进入 a, 实际上是进入 b
a 不是真实的路由地址, 这个过程自始至终都只是在 b 地址

end

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值