javascript - 子组件的 NgClass 未触发
问题描述
我有一个用于画廊轮播的组件,并为它下面的图像提供导航。单击导航波纹管中的图像应将轮播上显示的图像更改为选定的图像(这可行),并在导航中的选定图像周围添加边框(这不会)。我尝试通过 ngClass 将样式类附加到 HTML 元素来添加边框。我跟踪所选图像的索引,并且在导航中渲染图像时,如果所选图像的索引与渲染图像的索引相同,则添加边框。但是,我假设元素不会重新渲染,因为在我单击图像后,边框会从前一个图像中删除,并且不会按应有的方式添加到新图像中。还,第二次单击同一图像会添加边框(我认为这是子组件再次呈现的时候)。第一次忽略 ngClass 的问题是什么?
图片导航的HTML:
<div *ngIf="showImageList" class="product_gallery_images mobile_hidden">
<div *ngFor="let img of imgList; index as index" class="product_gallery_image".
(click)="selectImage(index)">
<img [ngClass]="{'selected_image': selectedImage === index}" src=".
{{img.fields.file.url}}" [id]="index.toString()">
</div>
</div>
选择图像功能:
selectImage(index) {
console.log(document.getElementById(this.selectedImage.toString()).classList);
document.getElementById(index.toString()).classList.add('selected_image');
document.getElementById(this.selectedImage.toString()).classList.remove('selected_image');
this.selectedImage = index;
this.changeImage.changeImage(index.toString());
}
我试图直接从元素的 classList 中添加和删除类,但这也不起作用。我具有相同页面的类似功能,其中边框呈现没有任何问题,并且无需动态更改类列表。这里的区别在于它不在子组件中。
首先点击导航中的第四张图片:
第二次点击导航中的第四张图片:
解决方案
我认为let
缺少关键字:
*ngFor="let img of imgList; let index = index"
推荐阅读
- firebase - 读取部分对象的 Firebase 安全规则
- apache-spark - 带有列列表的 Spark SQL 插入选择?
- pyspark - 从带有正则表达式的大量案例语句中创建 pyspark 列
- dart - 如何对同一列上的不同行使用不同的 crossAxisAlignment?
- c# - 使用 SSH.NET 连接到 SFTP 服务器时出现“SocketException:无法解析主机”
- asp.net - 如何在复选框选择时显示面板?
- php - Ajax 阻止发送表单
- python - 关于UnboundLocalError:在Python中赋值之前引用了局部变量'font_size'
- java - 如何从 Angular 2 应用程序执行驻留在服务器上的 java 代码?
- vuejs2 - vuejs 从组件的组件发出到父组件