【发布时间】:2017-12-23 08:43:52
【问题描述】:
我正在努力实现一些我认为很容易的东西。
在我的 Vue 应用程序中,我遍历了一个列表。每个列表项都是一个子组件。每个列表项都有一个展开/折叠按钮。这很好用,但我希望能够关闭父级的所有打开项目,但我似乎无法按照我的意愿进行操作。
展开/折叠是通过一个名为isOpen的变量控制的
<div v-if="isOpen">Something here</div>
我尝试使用计算属性而不是 isOpen 并传递道具,但问题是我认为它需要更像一个事件。
考虑三个打开的列表项。如果列表项由一个道具控制,并将其设置为false 会关闭项目,当重新打开一个项目时,该道具仍然是false,因此不会第二次起作用。我知道我可以将其更改回父级,但它似乎是错误的。
最好的方法是什么?
【问题讨论】:
-
为什么不将
open和close方法添加到设置/取消设置isOpen标志的内部组件?对于扩展所有,您只需从每个组件中调用open方法。 -
这应该可以通过简单地使用道具来实现,但如果组件没有直接相关,您总是可以使用事件总线。 alligator.io/vuejs/global-event-bus
-
将event bus 传递给每个孩子。让孩子们响应公共汽车上的
close事件。当父级在总线上发出关闭事件时,所有响应。