Est-il possible d’ajouter une classe à partir du fichier .ts à l’aide de solutions Angular
<div [class.extra-sparkle]="isDelightful == true">
Je veux faire ce qui précède, mais à partir du fichier .ts. Le moins de code le mieux.
<button class="general" (click)="ChangeScreen('Global')" [class.selected]="CurrentPage == 'Global'">Global</button>
<button class="general" (click)="ChangeScreen('Maintenance')" [class.selected]="CurrentPage == 'Maintenance'">Maintenance</button>
<button class="general" (click)="ChangeScreen('Settings')" [class.selected]="CurrentPage == 'Settings'">Settings</button>
<button class="general" (click)="ChangeScreen('Profile')" [class.selected]="CurrentPage == 'Profile'">Profile</button>
<button class="general" (click)="ChangeScreen('Transactions')" [class.selected]="CurrentPage == 'Transactions'">Transactions</button>
Je voudrais juste ajouter quelque chose comme ceci dans la fonction ChangeScreen:
ChangeScreen(page) {
page.addClass = page;
}
Ensuite, je peux supprimer toutes ces lignes: [class.selected]="CurrentPage == '...'"
Pendant que la solution avec le moteur de rendu fonctionne, je vous propose de créer une structure de données pour vos boutons.
buttons: Array<{label: string}> = [
{
label: 'Global'
},
{
label: 'Maintenance'
},
{
label: 'Settings'
},
{
label: 'Profile'
},
{
label: 'Transactions'
}
]
Ceci peut facilement être itéré en utilisant ngFor
<button
*ngFor="let button of buttons"
class="general"
(click)="ChangeScreen(button.label)"
[class.selected]="CurrentPage == button.label">
{{ button.label }}
</button>
Et la seule chose dont votre méthode ChangeScreen
aurait besoin, c’est… ce qu’elle fait déjà, régler la page actuelle!
Voir stackblitz pour un exemple de la façon dont cela se déroule.
Utiliser Renderer
Voir ici: https://angular.io/api/core/Renderer
et ici: https://angular.io/api/core/Renderer#setElementClass
import { Renderer } from '@angular/core';
constructor(private render:Renderer) { }
ChangeScreen(event:any) {
this.renderer.setElementClass(event.target,"selected",true);
}
En html:
<button class="general" (click)="ChangeScreen()">Global</button>
Ou Render2
:
Voir ici: https://angular.io/api/core/Renderer2
et ici: https://angular.io/api/core/Renderer2#addClass
import { Renderer2 } from '@angular/core';
constructor(private render:Renderer2) { }
ChangeScreen(event:any) {
this.renderer.addClass(event.target,"selected");
}
En html:
<button class="general" (click)="ChangeScreen()">Global</button>