vue 里面子组件直接放到父组件的 template 里面,子组件路由是怎么传参的?

2021-11-05 20:14:42 +08:00
 movq

我有一个父组件 A ,父组件里面的子组件 B 直接显示在父组件的 template 里面上:

A.vue:

<template>
...
...
	<b/>
</template>

import B from B.vue

setup(){
	components: {B}
}

在路由里面,是这么写的:

        {
            path: "/A_path",
            name: "A",
            components: {
                header: Header,
                main: A,
            },
            children: [{
                path: "B_path/:id",
                component: B,
            },],
        },

可以看到,在 B 的路由里面,有一个参数 id

但问题是,我的 B 直接在 A 组件下面显示了,那么这个 id 是怎样才能传递进去呢?

1879 次点击
所在节点    Vue.js
13 条回复
learnshare
2021-11-05 20:21:59 +08:00
movq
2021-11-05 20:24:04 +08:00
@learnshare

this.$route.params.id 是在 B 组件里面获取 B 组件接受到的 id 这个参数。

我的问题是,如果 B 组件直接在 A 组件里面显示,这种显示方法并没有使用路由跳转,那么 B 组件里面的 this.$route.params.id 是怎么传进去的呢?还是说这种情况没有这个参数?
learnshare
2021-11-05 20:28:02 +08:00
@movq

v3
>通过注入路由器,我们可以在任何组件内通过 this.$router 访问路由器,也可以通过 this.$route 访问当前路由:

v4
>通过调用 app.use(router),我们可以在任意组件中以 this.$router 的形式访问它,并且以 this.$route 的形式访问当前路由:

this.$route 代表的是当前路由( URL 路径),与哪个组件没有关系。只要组件已经渲染(显示)在页面中,就可以访问它
learnshare
2021-11-05 20:31:12 +08:00
gouflv
2021-11-05 22:44:42 +08:00
父子组件和路由没有半毛钱关系
gouflv
2021-11-05 22:47:42 +08:00
lin07hui
2021-11-05 23:25:14 +08:00
var app = new Vue({...})
app 里全部组件的 this.$router 都是同一个对象
neutrino
2021-11-06 01:15:50 +08:00
穿不进去的,你的 URL 里没有 B 只有 A ,也就没有 id
gadfly3173
2021-11-06 03:15:50 +08:00
https://router.vuejs.org/zh/guide/essentials/passing-props.html#%E5%B8%83%E5%B0%94%E6%A8%A1%E5%BC%8F

声明 param 为 prop ,这样你就可以把它当成 prop 传进去了
IvanLi127
2021-11-06 09:52:12 +08:00
给 <b /> 外面包个 <route-view> </route-view> ?
dfkjgklfdjg
2021-11-06 09:58:34 +08:00
组件 A:
<template>

</template>
dfkjgklfdjg
2021-11-06 10:01:25 +08:00
// 组件 A:
<template>
// 前后内容
<router-view></router-view>
</template>

// router.js
{
path: "/A_path",
name: "A",
children: [
{
path: "B_path/:id",
component: B,
},
],
},

其实就是组件套路由容器,让 router-view 做显示,就是正常的路由思路。
tuutoo
2021-11-08 08:54:21 +08:00
直接在 B 组件里添加一个属性 prop, 从父组件传过去吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/813367

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX