angular - Endre knappens utseende ved klikk Angular2


Jeg har et knapp-element i en *ngFor-array i Angular2-appen min.

Strukturen til knappen er:

<button>
   <span class="price">{{ product.price }}</span>

   <span class="text"> Add me! </span>
</button>

Når jeg klikker på det, trenger jeg å fjerne teksten inne i span .text og legge noe annet inni, for eksempel <span class="text"> Added! </span>, og ikke vise interpolasjonen i .price span.

Jeg prøvde å gjøre det på følgende måte:

<button [textContent]="isPressed? 'Added!' : 'Add me' "></button> Og erklær den tilsvarende egenskapen i klassen som:

private isPressed = false;

Det fungerer fint, men problemet er at det endrer alle knappene samtidig, og jeg trenger å endre bare den som ble klikket.

Hva er den riktige måten å få det til å fungere ordentlig på?

Svar #1

Du vil sannsynligvis lagre produkter du har lagt til et sted uansett. Bruk denne informasjonen til å vise riktig knappetekst, f.eks.:

<button (click)='addProduct(product)'>
   <span class="price" *ngIf="!isProductAdded(product)">{{ product.price }}</span>
   <span class="text">{{ isProductAdded(product) ? 'Added!' : 'Add me!'}}</span>
</button>

addProduct(product) og isProductAdded(product) må defineres i komponenten din.

Svar #2

Som foreslått i kommentarene bør du beholde valgt flagg på selve produktobjektet. På denne måten kan du gjøre noe slikt i malen:

<button (click)="selectProduct(product)">
  <span class="price">{{ product.price }}</span>
  <span class="text">{{ product.selected ? 'Added!' : 'Add me!' }}</span>
</button>

Og i kontrolleren:

selectProduct(product) {
  // You probable want to make HTTP request here to save product
  // and on success set selected flag, or do something else..
  product.selected = !product.selected
}

Relaterte artikler