Búsqueda de sitios web

html - Ocultar elemento usando ngFor y ngIf


Quiero ocultar los otros 3 elementos en el elemento li después de que uno de la lista sea clickeado (el elemento de la lista clickeado permanece sin ocultar), ya que al intentarlo oculta todos los elementos li.

pago.componente.ts

  paymentLists = [
    {
      name: 'IpayEasy',
    },
    {
      name: 'Credit Card',
    },
    {
      name: 'Internet Banking',
    },
    {
      name: '7-Eleven',
    },
  ];

  selectedIndex: number;

  select(index:number) {
    this.selectedIndex = index;
  }

pago.componente.html

  <ul *ngIf="selectedIndex == paymentList">
    <li (click)="select(paymentList)" 
      *ngFor="let paymentList of paymentLists; let i=index">
      <span>{{paymentList.name}}</span>
    </li>
  </ul>

Aquí lo que he intentado, demostración

  • 7-Eleven (clickeado li)
  • Banca por Internet

    Tarjeta de crédito

    IpayEasy

    Antes :

  • 7-Eleven (el elemento li permanece visible)
  • Después de :

    Respuesta #1

    Necesitas actualizar tu plantilla de la siguiente manera

    • Mover ngFor al elemento ng-container
    • Actualiza la condición ngIf para que sea verdadera solo si no hay un índice seleccionado o si coincide con el índice seleccionado
    • Pasar índice en la función select

    El HTML actualizado será el siguiente

    <ul>
       <ng-container *ngFor="let paymentList of paymentLists; let i=index" >
           <li (click)="select(i)"  *ngIf="selectedIndex === undefined || selectedIndex == i" [ngClass]="{'tab__list--selected--mobile': selectedIndex == paymentList}">
              <span>{{paymentList.name}}</span>
           </li>
       </ng-container>
    </ul>
    

    Para referencia, aquí está la versión que funciona

    Respuesta #2

    intentar

      <ul *ngIf="selectedIndex == paymentList">
        <ng-container *ngFor="let paymentList of paymentLists; let i=index">
          <li (click)="select(paymentList)" *ngIf="!selectedIndex || selectedIndex=i">
            <span>{{paymentList.name}}</span>
          </li>
        </ng-container>
      </ul>