Vue.js Vue:如何根据路由器视图组件为布局组件提供动态道具';s数据

Vue.js Vue:如何根据路由器视图组件为布局组件提供动态道具';s数据,vue.js,vue-component,vue-router,Vue.js,Vue Component,Vue Router,我想要一个布局组件,其中包含一个标题组件和一个,但是标题组件应该根据路由器视图组件的数据接收不同的动态道具 我不知道布局架构是如何实现的:要么使用嵌套路由,要么使用插槽并通过路由的元字段传递布局名称 因此,标题组件应该从视图组件以动态道具的形式传递,比如Home.vue:如果我们转到route/Home,路由器视图将是Home.vue,在Home.vue中,我们有一个反应数据字段(即滚动下降)和传递给标题组件的道具(即主题)应取决于此数据字段的值(scrolledDown) 我能想到的最简单的方

我想要一个布局组件,其中包含一个标题组件和一个
,但是标题组件应该根据路由器视图组件的数据接收不同的动态道具

我不知道布局架构是如何实现的:要么使用嵌套路由,要么使用插槽并通过路由的元字段传递布局名称

因此,标题组件应该从视图组件以动态道具的形式传递,比如Home.vue:如果我们转到route/Home,路由器视图将是Home.vue,在Home.vue中,我们有一个反应数据字段(即
滚动下降
)和传递给标题组件的道具(即
主题
)应取决于此数据字段的值(
scrolledDown

我能想到的最简单的方法是使用本地状态管理(vuex或其他什么),这样视图组件(即Home.vue)可以存储反应数据,布局组件可以获取它并将其作为道具传递给标题组件。但也许有更好的方法来实现这一点

MainHeader.vue:

<template>
  <div :class="`header--${theme}`">...</div>
</template>
<script>
export default {
  props: ["theme"]
}
</script>

...
导出默认值{
道具:[“主题”]
}
Layout.vue:

<template>
  <div>
    <main-header />
    <router-view />
  </div>
</template>

<script>
import MainHeader from "../MainHeader";
export default {
  components: { MainHeader }
}
</script>
<template>
  <div>
    <main-header />
    <slot />
  </div>
</template>

<script>
import MainHeader from "../MainHeader";
export default {
  components: { MainHeader }
}
</script>

从“./MainHeader”导入MainHeader;
导出默认值{
组件:{MainHeader}
}
或者:

App.vue:

<template>
  <component :is="layout">
    <router-view />
  </component>
</template>
// script with `layout` data prop and layout component imports

//带有'layout'数据道具和布局组件导入的脚本
Layout.vue:

<template>
  <div>
    <main-header />
    <router-view />
  </div>
</template>

<script>
import MainHeader from "../MainHeader";
export default {
  components: { MainHeader }
}
</script>
<template>
  <div>
    <main-header />
    <slot />
  </div>
</template>

<script>
import MainHeader from "../MainHeader";
export default {
  components: { MainHeader }
}
</script>

从“./MainHeader”导入MainHeader;
导出默认值{
组件:{MainHeader}
}
Home.vue:

<template>
  <div>...</div>
</template>
<script>
export default {
  computed: {
    scrolledDown() { ... }
  }
}
</script>

...
导出默认值{
计算:{
scrolledDown(){…}
}
}

Vuex的用途正是您所需要的—兄弟组件之间或不是直接父子耦合的组件之间共享数据。是的,我认为您是对的,本地状态是最佳选择。另一个好处是松耦合
本地状态
引用当前组件的数据部分。Vuex实际上维护了一个可由多个组件使用的
共享状态。实际上
本地状态
主要指的是应用程序的状态,该状态不会在服务器端保存;)->这是双重含义,组件数据部分中的数据也被称为
(本地|组件)状态