html - 添加事件侦听器在动态(*ngFor)创建的元素中不起作用
问题描述
我正在尝试扩展这个手风琴视图。
每当单击部分按钮时,此userSelection[i].addEventListener
..事件侦听器都会使id 变为“开放”。所以手风琴得到扩展。
当我不使用时,这工作正常*ngFor
。如果我使用*ngFor
指令 addEventListener 不起作用。
不工作的 HTML 代码:
<div class="accordian" id='accordian'>
<section class="section">
<div class="section1" *ngFor='let m of data.accordian.printers'>
<button class="accordion" (click)='modelpop()'>{{m.type}}
<i class="fa fa-angle-right closearrow" id='arrowshow'></i>
<i class="fa fa-angle-down openarrow" id='arrownotshow'></i>
</button>
<div class="panel" id='close'>
<p>menu 1</p>
<p>menu 2</p>
<p>menu 3</p>
<p>menu 4</p>
</div>
</div>
CSS 代码:
#close {
max-height: 0;
overflow: hidden;
}
.accordian {
position: absolute;
background: rgb(244, 244, 244);
top: 140px;
left: 10px;
width: 95%;
box-shadow: 0 0 20px 2px #00000085;
padding-bottom: 20px
}
.accordion {
background-color: #eee;
color: #444;
cursor: pointer;
padding: 25px;
width: 250px;
border: none;
outline: none;
border-radius: 10px;
font-family: "Montserrat";
font-weight: bolder
}
输入脚本:
ngOnInit(){
var userSelection = document.getElementsByClassName("accordion");
var pane = document.getElementsByClassName('panel');
for (let i = 0; i < userSelection.length; i++) {
userSelection[i].addEventListener("click", function () {
if (pane[i].id == 'open') {
pane[i].id = 'close';
} else {
pane[i].id = 'open';
}
})
}
}
工作正常的HTML代码:
<section class="section">
<div class='section1'>
<button class="accordion" (click)='modelpop()'>Section 1
<i class="fa fa-angle-right closearrow" id='arrowshow'></i>
<i class="fa fa-angle-down openarrow" id='arrownotshow'></i>
</button>
<div class="panel" id='close'>
<p>menu 1</p>
<p>menu 2</p>
<p>menu 3</p>
<p>menu 4</p>
</div>
<div class='section1'>
<button class="accordion" (click)='modelpop()'>Section 1
<i class="fa fa-angle-right closearrow" id='arrowshow'></i>
<i class="fa fa-angle-down openarrow" id='arrownotshow'></i>
</button>
<div class="panel" id='close'>
<p>menu 1</p>
<p>menu 2</p>
<p>menu 3</p>
<p>menu 4</p>
</div>
</div>
解决方案
我创建了一个简单的解决方案,可以在点击时切换元素的可见性。
您不需要编写这么多代码,只需为绑定到列表的数组中的每个项目维护一个可见性标志,并在每次单击时切换该标志。
示例位于https://stackblitz.com/edit/angular-toggle-options
它也有一点animations
。animations
您可以通过从组件装饰器中删除属性并从模板中触发动画来摆脱它
推荐阅读
- sql - 如何在 SQL 的 2 列中对具有镜像值的行进行重复数据删除
- github - Github 或 GItLab 网站上是否有提供远程存储库的终端?
- python - Fabric:如何访问 postgres shell
- flutter - 如何创建网格布局?
- c# - 如何在不同的方法中验证在一个方法中创建的用户信息对象
- exoplayer2.x - 如何序列化/存储 Media3/ExoPlayer MediaItem
- java - Android numberPicker to countdownTimer
- python - SQLAlchemy ORM & 依赖倒置
- ionic-framework - 在 ionic5 ion-slide 中转到您想要的幻灯片页面
- visual-studio - 如何更改 Visual Studio 中选项卡布局的字体和背景颜色?