Ваш код практически правильный, но есть несколько моментов, которые можно улучшить.
1. Убедитесь, что вы правильно подключили директиву v-click-outside. Обычно это делается внешней библиотекой или плагином Vue. Убедитесь, что вы правильно установили и настроили плагин.
2. Убедитесь, что правильно передаете метод `onClickOutside` в директиву v-click-outside. Замените `v-click-outside="onClickOutside"` на `v-click-outside="onClickOutside"`.
3. Убедитесь, что правильно используете компонент-потомок `<spoiler>`. Передайте метод `toggleMenu` компоненту-потомку, чтобы он мог управлять видимостью меню:
```
<spoiler v-show="show" v-click-outside="onClickOutside" :toggle-menu="toggleMenu">
<button @click="toggleMenu">Меню</button>
<menu v-show="menuVisible">...</menu>
</spoiler>
```
4. Обновите ваш компонент-потомок, чтобы принимал проп `toggleMenu` и использовал его для управления видимостью меню:
```
export default {
props: ['toggleMenu'],
data() {
return {
show: true,
menuVisible: false
};
},
methods: {
onClickOutside() {
this.menuVisible = false;
}
}
};
```
Убедитесь, что вы правильно передаете проп `toggleMenu` из родительского компонента и используете его внутри компонента-потомка для управления видимостью меню.
Если после этих изменений меню по-прежнему не закрывается при нажатии на компонент-родитель или на кнопку меню, то возможно, вам нужно обновить версию плагина или директивы, чтобы исправить сбои.