使用 Vue3 和 vue-router4,两个不同的组件共享同一个子组件。组件模板设置如下:
<!-- Component A -->
<template>
<ComponentA>
<Child />
</ComponentA>
</template>
<!-- Component B -->
<template>
<ComponentB>
<Child />
</ComponentB>
</template>
<!-- Child -->
<template>
<FilterResults />
</template>
这些是配置的路由:
const routes = [
{
path:'/componenta/:param',
component: ComponentA
},
{
path:'/componentb',
component: ComponentB
}
]
const router = createRouter({
history: createWebHistory(),
routes,
})
组件中设置了一些数据Child
:
export default {
name: 'Child'
...,
data() {
return {
filters: {
size: [
{
selected: this.$route.query.size === "1m"
}
]
}
}
}
}
以上旨在selected
根据是否在路由中找到匹配项来设置为 true 或 false。然后将结果FilterResults
作为道具传递给:
<!-- Component A -->
<template>
<ComponentA>
<Child />
</ComponentA>
</template>
<!-- Component B -->
<template>
<ComponentB>
<Child />
</ComponentB>
</template>
<!-- Child -->
<template>
<FilterResults :filters="filters" />
</template>
通过以上,selected
过滤器数据中的值被评估,预期结果是当组件加载时,$route 中的过滤器在true
数据中设置为。
问题是, 和 的子组件ComponentA
是ComponentB
相同的:
ComponentA
/componenta/xyz?size=1m
无法按预期工作,其中在路由中找到的匹配项未true
在filters
数据中设置为。ComponentB
/componentb?size=1m
确实按预期工作,其中在路由中找到的匹配项设置为true
数据中filters
。