web-dev-qa-db-fra.com

Angular - Change BackGround Color of Row in Table After click the Button

Je veux changer la couleur d'arrière-plan de la ligne sélectionnée après avoir cliqué sur le bouton que j'ai essayé mais changer la couleur de toutes les lignes. Il s'agit d'un code similaire.

HTML

<tr *ngFor="let data of (datas$ | async) | filter:authService.filter | paginate: config | orderBy: key : reverse" [ngClass]="{'data-selected':isSelected}">
    <td>{{data.id}}</td>
    <td>{{data.text}}</td>
    <td>
       <a class="mr-3" (click)="delete(data.id)"><i class="fa fa-remove"></i>
            Remove
       </a>
    </td>
</tr>

TS

delete(postId) {
    this.isSelected=true;
    const ans = confirm('TEXT TEXT '+dataid);
    if (ans) {
      this.dataService.deleteData(postId).subscribe((data) => {
        if(data) {
          this.showSuccessDelete();
        } else {
          this.showError();
        }
        this.isSelected=false;
        this.loadDatas();
      });
    }
  }

CSS

.data-selected{
  background-color: #e9eaea;
}

Merci beaucoup

5
Toriga

Vous pouvez ajouter un attribut à votre classe de composants et l'appeler selectedRow, qui obtiendra le data.id.

selectedRow: number; 

delete(postId,numeroDeposito) {
this.selectedRow = postId; 
const ans = confirm('TEXT TEXT '+dataid);
if (ans) {
  this.dataService.deleteData(postId).subscribe((data) => {
    if(data) {
      this.showSuccessDelete();
    } else {
      this.showError();
    }
    this.isSelected=false;
    this.loadDatas();
  });
}

}

puis dans la balise tr, utilisez [ngClass]="{'data-selected': selectedRow === data.id}".

1
a bouchenafa

Vous pouvez également adopter l'approche suivante:

Démo de travail

[class.data-selected]="data.isSelected"

et sur événement de clic.

(click)="data.isSelected = true";
1
Adrita Sharma

Plutôt que de déclarer une variable isSelected distincte. vous devez introduire est une propriété de l'objet data. Ex:

{
    id: 1,
    name: 'AA',
    isSelected: false
}

Ensuite, en cliquant, vous pouvez le basculer lorsque la fonction delete est appelée avec data.id comme paramètre.

deleteMe(id: string) {
    this.data.map(x => x.isSelected = false);
    this.data.find(x => x.id === id).isSelected = true;
}

Et en html

<tr *ngFor="let item of data" [ngClass]="{selected: item.isSelected}">
    <td>{{item.id}}</td>
    <td>{{item.name}}</td>
    <td><button (click)="deleteMe(item.id)">delete me</button></td>
</tr>

Voici un minimum exemple .

0
Iftifar Taz

Vous pouvez utiliser un style conditionnel pour y parvenir.

<div [className]="( checkSelectedRow(i) ? 'example-class' : 'other-class'"></div>

Dans un fichier TypeScript:

checkSelectedRow(rowNumber) : boolean {  
    for(int j=0; j<rows.length; j++){
       if(j==i){
         rows[i]["selected"]=true; return true;
       }; 
    } 
    return false;
}
0
Sami HK

cela peut être résolu en créant un tableau de lignes sélectionnées comme celle-ci

  deleteList = []

puis lorsque vous cliquez sur supprimer Poussez l'id de l'élément dans la liste

  delete(id) { 
    this.deleteList.Push(id)
  }

puis au modèle, utilisez la directive ngClass pour définir la classe si l'id de l'élément est inclus dans la liste

<tr *ngFor="let data of list" [ngClass]="{'data-selected':deleteList.includes(data.id)}">
   ....
</tr>

démo ????????

0
malbarmavi