angular - 如何访问多个下拉列表中的每个下拉列表
问题描述
如何使用 viewchildren 访问我的每个下拉列表?
下拉列表通过ngfor
.
使用viewchildren,每当我单击打开一个时,另一个不会关闭或有时不会打开。请帮忙。
<div #dropdown class="dropdown is-right" [id]="comment._id">
<div class="dropdown-trigger">
<a class="actionBtn" aria-haspopup="true" aria-controls="dropdown-menu3" (click)="toggleDropdown(comment._id)">
<img src="../../../../assets/more.png" alt="">
</a>
</div>
<div>
<div class="dropdown-menu" id="dropdown-menu3" role="menu">
<div class="dropdown-content">
<a href="#" class="dropdown-item">
Overview
</a>
<a href="#" class="dropdown-item">
Modifiers
</a>
</div>
</div>
</div>
</div>
@ViewChildren('dropdown') dropDown: QueryList<any>
toggleDropdown(comment_id) {
this.dropdown = this.dropDown.find(x => x.nativeElement.attributes.id.nodeValue == comment_id)
if (this.dropdown.nativeElement.classList.contains('is-active') === false) {
this.dropdown.nativeElement.classList.add('is-active')
} else {
this.dropdown.nativeElement.classList.remove('is-active')
}
}
解决方案
我假设您正在尝试将is-active
类添加到单击的下拉列表中,并从所有其他下拉列表中删除相同的类。toggleDropdown
如果是这样,那么你的逻辑就有缺陷。您正在使用数组和切换类识别单击的find
下拉dropDown
列表is-active
。但是,您不会is-active
从任何其他已经打开的下拉列表中删除课程。您可以遍历所有下拉列表 - 然后is-active
为单击的下拉列表切换类并is-active
从其他下拉列表中删除。
toggleDropdown(comment_id) {
this.dropDown.forEach(dropdown => {
if(dropdown.nativeElement.attributes.id.nodeValue == comment_id){
dropdown.nativeElement.classList.toggle('is-active');
} else{
dropdown.nativeElement.classList.remove('is-active')
}
});
}
推荐阅读
- python - VSCode 无法导入“示例”pylint(导入错误)
- hyperledger-fabric - 可以在 CLI 命令的帮助下完成 fabric-ca 身份验证
- javascript - vue.js 中 => (箭头)运算符的确切用途是什么?
- css - CSS 颜色叠加与背景图像
- java - Android 值 ListView Kotlin
- javascript - 滚动鼠标滚轮时列表框调整大小
- ruby - 如何通过机架中间件防止错误过滤请求
- c - 是否有等效于 C 的 python 中的“in”关键字
- xamarin - Xamarin,为什么我的 if/else 语句不能从 Settings.plugin 检索数据
- sql - SQL 选择记录,其中一个表中的两个值都作为子字符串出现在第二个表的文本字段中