* ng如果要在两个内应用一个类* ngFor

时间:2019-02-19 11:50:30

标签: angular typescript

当我单击元素时,我试图应用一个类,但是它在两个*ngFor之内。

我考虑过使用多维数组,但是显然这不是正确的方法,因为它将类应用于多个元素。

我尝试过类似的事情:

<div *ngFor="let tabelaAnuncioContas of sortedData; let a = index">
    <tr *ngFor="let anuncio of tabelaAnuncioContas.data[0].anuncio; let i = index">
        <td><img [class.zoomImg]="zoomImg[a][i] == true" (click)="zoomImg[a][i]= !zoomImg[a][i]" [src]="anuncio.produto.foto_prin_1"></td>
    </tr>
</div>

TS:

zoomImg:[][] = [[]];

当数组sortedData中有多个元素时,返回:

  

无法读取未定义的属性“ 0”

当数组sortedData中只有一个元素时,不会生成错误消息,但是当我单击该元素时,所有元素都将应用该类。

@编辑

我的json sortedData: enter image description here

2 个答案:

答案 0 :(得分:0)

我相信您的错误来自<tr *ngFor="let anuncio of tabelaAnuncioContas.data[0].anuncio; let i = index">这行,其中您已硬编码data[0]

tabelaAnuncioContas是从可观察的事物中获取价值吗?如果是,则在初始状态下tabelaAnuncioContas是未定义的,或者tabelaAnuncioContas.data是未定义的,因此会出现此错误。

解决方案::尝试使其异步或保留另一项检查,例如tabelaAnuncioContas.data!=undefined && tabelaAnuncioContas.data.lenght > 0

答案 1 :(得分:0)

我有所不同,但是现在我有了想要的东西。

HTML:

<td><img (click)="aplicaZoomMiniatura($event)" [src]="anuncio.produto.foto_prin_1"></td>

TS:

  aplicaZoomMiniatura(event){

    let classList = event.target.classList;
    event.preventDefault()

    if(classList.contains("zoomImg")){
      this.render.setElementClass(event.target, "zoomImg", false)
      } else {
      this.render.setElementClass(event.target,"zoomImg",true);
    }
  }