【发布时间】:2020-09-11 15:31:15
【问题描述】:
我有这样的布局:
.------------------------+----------------.
| Current Tab Title | Controls |
+------------------------+----------------+
| Tab1 Tab2 [Tab3] |
+-----------------------------------------+
| Main Content |
| |
'-----------------------------------------'
“控件”字段内容在逻辑上应该属于当前选项卡。但是我不能把它放在同一个 Vue 组件中,因为它应该在应用程序模板的不同位置呈现。 此外,标签标题应取决于当前选择的标签。
我制作了 Tab1 等 <router-link> 组件。
对于Current Tab Title,我滥用了$route.name field。
我可以使用named views 来显示Controls。
但我不明白如何在 Controls 块中设置一些控件,这些控件将依赖并影响当前选项卡中的状态。
例如,对于Tab1,我们希望显示一个复选框,该复选框会影响标签的某些行为。所以它的状态应该存储在Tab1 组件中,而不是Tab1Controls 组件中。但是我怎样才能连接它们,即将checkbox 的当前值从Tab1 instance 传递给Tab1Controls 实例,并将一个事件从Tab1Controls 实例传回Tab1 实例?
这显然可以用Vuex 解决,但我想避免它。
一般建议是将状态向上移动,但我认为路由器不可能。无论如何,这会让事情变得一团糟,因为checkbox 数据应该属于Tab1 或Tab1Controls,并且与其他标签无关。
【问题讨论】:
-
您说的是应用程序级状态管理,这正是 Vuex 的用途。为什么不使用它?另一种选择是事件总线,但这实际上只是一个 hack
-
为什么不能用路由器?
有效 -
@Estradiaz 因为
<router-view>是一个在其中加载组件的包装器。它不会将任何事件侦听器绑定到这些组件 -
@Phil 我想通过
data.attrs会这样做吗? github.com/vuejs/vue-router/blob/… -
@Estradiaz 在这种情况下,您可能是对的。我觉得我很久以前就试过了,但它没有用,但也许现在可以了
标签: javascript vue.js vue-router