javascript - CoreUI 一次只有一个下拉菜单
问题描述
我希望我的侧边栏下拉菜单一次只能使用一个,所以当我点击另一个下拉菜单时,前一个下拉菜单将再次隐藏。
下面是我当前下拉列表的示例,您可以在其中一次打开多个下拉列表。https://coreui.io/vue/demo/#/dashboard
<template>
<router-link tag="li" class="nav-item nav-dropdown" :to="url" disabled>
<div class="nav-link nav-dropdown-toggle" @click="handleClick"><i :class="icon"></i> {{name}}</div>
<ul class="nav-dropdown-items">
<slot></slot>
</ul>
</router-link>
</template>
<script>
export default {
props: {
name: {
type: String,
default: ''
},
url: {
type: String,
default: ''
},
icon: {
type: String,
default: ''
}
},
methods: {
handleClick(e) {
e.preventDefault();
e.target.parentElement.classList.toggle('open');
}
}
};
</script>
请帮忙。
解决方案
制作无线电组类型控制器(一次只能选择一项)的常用方法是使用一个变量来指示选择了哪一项。然后每个元素将自己与选定的元素进行比较,以确定它是否应该处于打开状态。
由于您有多个router-link
彼此不了解的 s,因此父对象将必须拥有 which-one-is-selected 指示变量。handleClick
您router-link
应该是父级将通过更改指示变量来处理的$emit
事件。并且router-link
应该接收指标变量作为道具,并在计算中使用它来适当地设置open
类。
您的代码可能如下所示:
<template>
<router-link tag="li" class="nav-item nav-dropdown" :class="openClass" :to="url" disabled>
<div class="nav-link nav-dropdown-toggle" @click="handleClick"><i :class="icon"></i> {{name}}</div>
<ul class="nav-dropdown-items">
<slot></slot>
</ul>
</router-link>
</template>
<script>
export default {
props: {
name: {
type: String,
default: '',
selectedItem: Object
},
url: {
type: String,
default: ''
},
icon: {
type: String,
default: ''
}
},
computed: {
openClass() {
return this.selectedItem === this ? 'open' : '';
}
}
methods: {
handleClick(e) {
e.preventDefault();
this.$emit('setSelected', this);
}
}
};
</script>
推荐阅读
- html - 如何使用 Swift 遍历 HTML DOM
- c++ - 有没有办法通过另一个号码输入一个号码?
- byte-buddy - 我可以使用 Implementation.Composable#andThen() 组合一个带有 FixedValue 的 InvokeDynamic 吗?
- javascript - 内容可编辑方法无法正常工作
- javascript - 摆脱 Dom 元素 stage.removeChild()
- bash - bash 参数转换给出了错误的替换
- python - pymongo 在值中查找字符串
- javascript - 使用js的进度条
- powershell - 在 PowerShell 脚本的 While($true) 循环中使用作业
- c++ - std::string_view data() 可以在分配和复制之间进行指针比较吗?