У меня есть два раскрывающихся меню в компоненте, и я хочу закрыть одно, когда другое открыто. Я новичок в Vuejs, поэтому я не хочу использовать какой-либо плагин, я хочу создать его с нуля, может ли кто-нибудь помочь мне с этим? вот мой реальный код
<template>
<ul class = "menu">
<li v-for = "menu in menus" :key = "menu.id">
<button class = "button is-white" @click = "toggle">
{{menu.name}}
<ion-icon name = "chevron-down-outline"></ion-icon>
</button>
<div class = "dropdown" v-show = "open">
<router-link to = "/" v-for = "item in menu.subMenu">
<div class = "options">
{{item}}
</div>
</router-link>
</div>
</li>
</ul>
data() {
return {
open: false,
menus: [
{
id: 1,
name: 'My Profile',
subMenu: ['Dashboard', 'My Profile', 'Logout']
},
{
id: 2,
name: ' My Orders',
subMenu: ['Order']
}
],
}
},
created() {
window.addEventListener("click", this.close);
},
beforeDestroy() {
window.removeEventListener("click", this.close);
},
methods: {
toggle() {
this.open = !this.open
},
close(e) {
if (!this.$el.contains(e.target)) {
this.open = false;
}
}
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Используйте id вместо логического значения для открытия/закрытия:
const app = Vue.createApp({
data() {
return {
open: null,
menus: [{id: 1, name: 'My Profile', subMenu: ['Dashboard', 'My Profile', 'Logout']}, {id: 2, name: ' My Orders', subMenu: ['Order']}],
}
},
methods: {
toggle(id) {
this.open = this.open === id ? null : id
},
}
})
app.mount('#demo')<script src = "https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id = "demo">
<ul class = "menu">
<li v-for = "menu in menus" :key = "menu.id">
<button class = "button is-white" @click = "toggle(menu.id)">
{{ menu.name }}
<ion-icon name = "chevron-down-outline"></ion-icon>
</button>
<div class = "dropdown" v-show = "menu.id === open">
<div to = "/" v-for = "item in menu.subMenu">
<div class = "options">
{{ item }}
</div>
</div>
</div>
</li>
</ul>
</div>
@Youmi Youminem Добро пожаловать, ура :)