Angulaire 2 - Appliquer le style conditionnel à une directive de l'enfant de l'élément HTML
Je suis en train d'appliquer une classe à un élément HTML basé sur un événement click. Cela fonctionne bien lors de la définition de la propriété de classe pour les enfants du composant sélecteur du composant parent du modèle comme on le voit par l'extrait suivant du composant parent:
[class.bordered]='isSelected(item)'
Ce sera réglé de manière appropriée le style lorsque cet élément est cliqué. Cependant, je tiens à mettre un à l'intérieur de l'élément HTML de la classe de l'enfant composant basé sur le même genre d'événement click, voici la cible souhaitée pour le style que pour le composant enfant:
template: `
<div class="This is where I really want to apply the style">
{{ item.val }}
</div>
`
Est-il un moyen de faire ce qui est facilement pris en charge? Ou est-ce considéré comme une mauvaise pratique et je doit la conception de ma composants afin d'éviter ce type de conditionnel style de situation?
Code complet:
@Component({
selector: 'parent-component',
directives: [ChildComponent],
template: `
<child-component
*ngFor='#item of items'
[item]='item'
(click)='clicked(item)'
[class.bordered]='isSelected(item)'>
</child-component>
`
})
export class ParentComponent {
items: Item[];
currentItem: item;
constructor(private i: ItemService) {
this.items = i.items;
}
clicked(item: Item): void {
this.currentItem = item;
}
isSelected(item: Items): boolean {
if (!item || !this.currentItem) {
return false;
}
return item.val === this.currentItem.val;
}
}
@Component({
selector: 'child-component',
inputs: ['item'],
template: `
<div class="This is where I really want to apply the style">
{{ item.val }}
</div>
`
})
export class ChildComponent {}
Vous devez vous connecter pour publier un commentaire.
Ajouter un style à la
child-component
J'ai trouvé une meilleure façon de résoudre ce problème en faisant un bon usage de Angular2 fonctionnalités.
Spécifiquement au lieu de faire de la ruse avec :l'hôte et le CSS fonctionnalité, vous pouvez simplement passer une variable à l'enfant du composant en train de changer:
définie dans l'élément de l'enfant, le changement de classe à
Puis sur la div vous souhaitez appliquer le bordé de la classe dans le modèle de l'enfant composant simplement ajouter:
Voici le code complet avec le changement:
Quelque chose comme cela fonctionne très bien pour moi:
Voici un exemple de travail:
https://stackblitz.com/edit/example-conditional-disable-button?file=src%2Fapp%2Fapp.component.html