J'ai un problème à cacher et à afficher un élément dépendant d'une variable booléenne dans Angular 2.
voici le code que le div doit afficher et masquer:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
la variable est "éditée" et elle est stockée dans mon composant:
export class AppComponent implements OnInit{
(...)
public edited = false;
(...)
saveTodos(): void {
//show box msg
this.edited = true;
//wait 3 Seconds and hide
setTimeout(function() {
this.edited = false;
console.log(this.edited);
}, 3000);
}
}
L'élément est masqué, lorsque la fonction saveTodos démarre, l'élément est affiché, mais après 3 secondes, même si la variable revient à false, l'élément ne se cache pas. Pourquoi?
edited
est une variable globale. Quelle serait votre approche dans un*ngFor-loop
?Il existe deux options en fonction de ce que vous souhaitez réaliser:
Vous pouvez utiliser la directive hidden pour afficher ou masquer un élément
Vous pouvez utiliser la directive de contrôle ngIf pour ajouter ou supprimer l'élément. Ceci est différent de la directive masquée car elle n'affiche / masque pas l'élément, mais elle ajoute / supprime du DOM. Vous pouvez perdre les données non enregistrées de l'élément. Cela peut être le meilleur choix pour un composant d'édition qui est annulé.
Pour votre problème de changement au bout de 3 secondes, cela peut être dû à une incompatibilité avec setTimeout. Avez-vous inclus la bibliothèque angular2-polyfills.js dans votre page?
la source
[hidden]="edited"
ne semble pas avoir d'effets ...?[hidden] { display: none !important;}
dans votre css global.Lorsque vous ne vous souciez pas de supprimer l'élément Html Dom-Element, utilisez * ngIf.
Sinon, utilisez ceci:
la source
Pour que le composant enfant montre que j'utilisais
*ngif="selectedState == 1"
Au lieu de cela, j'ai utilisé
[hidden]="selectedState!=1"
Cela a fonctionné pour moi .. le chargement du composant enfant correctement et après cacher et un-hide composant enfant n'était pas indéfini après avoir utilisé cela.
la source
C'est un bon cas d'utilisation pour une directive. Quelque chose comme ça est étonnamment utile.
la source
ngIf
esttrue
. Existe-t-il un moyen de définir la variable du parent qui contrôle cela surfalse
?ngIf
plus de savoir si l'élément est dans le DOM ou non. Ce que je veux, c'est ceci:<div [hidden]="messages" [removeAfter]=3000>...
où je montre / masque les messages s'il y en a, puis supprime les messages après 3 secondes pour que l'utilisateur n'ait pas à fermer la boîte. J'ai ajouté votre directive ci-dessus et l'ai commutée pour faire unhide()
mais elle n'est pas appelée lorsque les messages sont affichés. Comment puis-je l'invoquer lors de l'événement?@Output()
etEventEmitter
?Nous pouvons le faire en utilisant l'extrait de code ci-dessous.
Code angulaire:
Modèle HTML:
la source
En fonction de vos besoins,
*ngIf
ou[ngClass]="{hide_element: item.hidden}"
lorsque la classe CSShide_element
est{ display: none; }
*ngIf
peut causer des problèmes si vous changez les variables d'état*ngIf
est la suppression, dans ces cas, l'utilisation de CSSdisplay: none;
est requise.la source
La solution @inoabrian ci-dessus a fonctionné pour moi. Je suis tombé sur une situation où je rafraîchirais ma page et mon élément caché réapparaîtrait sur ma page. Voici ce que j'ai fait pour le résoudre.
la source
Ajoutez simplement bind (this) dans votre fonction setTimeout, cela commencera à fonctionner
et en changement HTML
À
la source