【发布时间】:2021-06-02 14:26:01
【问题描述】:
我有一个这样的组件:
<template>
<Popover v-slot="{ open }" :ref="`${name}-parent`">
<div>
<PopoverButton :ref="name">
<div>
<slot name="buttoncontent"></slot>
</div>
<ChevronDownIcon/>
</PopoverButton>
</div>
<transition>
<PopoverPanel>
<slot name="popovercontent"></slot>
</PopoverPanel>
</transition>
</Popover>
</template>
<script>
import {Popover, PopoverButton, PopoverPanel} from '@headlessui/vue'
import {ChevronDownIcon} from '@heroicons/vue/solid'
export default {
name: 'PopoverMenu',
props: {
name: {
type: String,
},
title: {
type: String,
default: ''
},
},
components: {
Popover,
PopoverButton,
PopoverPanel,
ChevronDownIcon,
},
setup () {
return {}
},
watch: {
'$route' () {
// this.$refs[this.name] ... do fancy stuff on route change here
},
},
mounted () {
console.log(this.$refs[`${this.name}-parent`])
}
}
</script>
现在我想根据route 的变化来改变open 的状态。 Ergo:如果用户点击一个链接,弹出框应该关闭。
Popover、PopoverButton 和 PopoverPanel 由 headlessui 提供,仅在组件内提供 open 插槽。我的想法是访问open 属性并手动更改它。
【问题讨论】:
-
mounted 方法是在包含 Popover 的父组件上,对吧?作用域变量实际上是在父组件中定义的,它不是已经有 open 值了吗?
-
我编辑了我最初的问题:
组件来自 headlessui,我正在尝试从中创建一个可重用的组件。