Quel est l'équivalent de ngShow et ngHide Angulaire 2+?
J'ai un certain nombre d'éléments que je veux être visible sous certaines conditions.
Dans AngularJS je voudrais écrire
<div ng-show="myVar">stuff</div>
Comment puis-je faire dans Angulaire 2+?
Vous devez vous connecter pour publier un commentaire.
Juste lier à la
hidden
propriétéVoir aussi
questions
hidden
a des problèmes bien car elle peut entrer en conflit avec les CSS pour ladisplay
de la propriété.Voir comment
some
dans Plunker exemple n'obtient pas caché parce qu'il a un styleensemble. (Cela peut se comporter différemment dans d'autres navigateurs que j'ai testé avec Chrome 50)
solution de contournement
Vous pouvez résoudre le problème en ajoutant
À un style global dans
index.html
.un autre écueil
sont les mêmes que
et ne sera pas afficher l'élément.
hidden="false"
va affecter la chaîne"false"
qui est considéré comme truthy.Seule la valeur
false
ou la suppression de l'attribut seront effectivement rendre l'élémentvisible.
À l'aide de
{{}}
convertit également l'expression d'une chaîne et ne fonctionnent pas comme prévu.Que la liaison avec
[]
fonctionnera comme prévu parce que cefalse
est affecté commefalse
au lieu de"false"
.*ngIf
vs[hidden]
*ngIf
élimine efficacement son contenu à partir de la DOM, tandis que[hidden]
modifie ledisplay
propriété et seule demande au navigateur de ne pas montrer le contenu, mais le DOM toujours le contient.*ngIf
peut-être la façon correcte dans la plupart des cas, mais parfois vous voulez vraiment un élément à être là, visuellement caché. Un style CSS avec[hidden]{display:none!important}
aide. C'est, par exemple, comment Bootstrap permet de s'assurer[hidden]
éléments sont en fait cachés. Voir GitHubUtiliser le
[hidden]
attribut:Ou vous pouvez utiliser
*ngIf
Ce sont deux moyens pour afficher/masquer un élément. La seule différence est:
*ngIf
va supprimer l'élément du DOM, tandis que[hidden]
va dire au navigateur d'afficher/masquer un élément à l'aide de CSSdisplay
propriété en gardant l'élément dans le DOM.async
pipe, comme l'abonnement à la observables ne sera ajouté après la condition devient vraie!Je me retrouve dans la même situation à la différence que dans mon cas, l'élément a été un conteneur flex.Si ce n'est pas votre cas un travail facile, pourraient être
dans mon cas, en raison du fait que beaucoup de navigateurs que nous soutenons encore faut le vendeur préfixe pour éviter les problèmes, je suis allé pour une autre solution facile
où alors la CSS est simple comme
à quitter puis de l'affichage de l'état gérée par la classe par défaut.
invalid-feedback
classe.Désolé, je suis en désaccord avec la liaison de caché qui est considéré comme dangereux pour la sécurité lors de l'utilisation Angulaire 2. C'est parce que le caché, le style peut être remplacé facilement par exemple à l'aide de
L'approche recommandée consiste à utiliser *ngIf ce qui est plus sûr. Pour plus de détails, veuillez vous référer à la officiel Angulaire blog. 5 Erreurs de débutant à Éviter Angulaire 2
*ngIf
est un mauvais choix. Mais vous avez raison que les conséquences doivent être considérés, et en soulignant les pièges est toujours une bonne idée.ngIf
exactement les réponses que ce qui est demandé. Je veux masquer certains contenus sur une page qui contient un<router-outlet>
. Si j'utilisengIf
, j'obtiens une erreur qu'il ne peut pas trouver la sortie. J'ai besoin de la sortie à hidden jusqu'à ce que mes chargements de données, pas de absent jusqu'à ce que mes chargements de données.Selon Angulaire 1 documentation de ngShow et ngHide, ces deux la directive ajoute le style css
display: none !important;
, à l'élément en fonction de la condition, de la directive (pour ngShow ajoute le css sur la valeur false, et pour ngHide ajoute le css pour valeur true).Nous pouvons réaliser ce comportement à l'aide Angulaire 2 de la directive ngClass:
Avis que, pour
show
comportement dans Angular2 nous avons besoin d'ajouter!
(pas) avant la ngShowVal, et pourhide
comportement dans Angular2 nous ne pas besoin d'ajouter!
(pas) avant la ngHideVal.Si votre cas est que le style d'affichage si vous n'en pouvez également utiliser le ngStyle directive et de modifier l'affichage directement, je l'ai fait pour un bootstrap liste Déroulante de l'UL, il est configuré pour afficher aucun.
J'ai donc créé un événement click pour "manuellement" le basculement de l'UL pour afficher
Puis sur le composant, j'ai showDropDown:bool attribut que je bascule tous les temps, et sur la base int, définir la displayDDL pour le style comme suit
Si vous utilisez Bootstrap est aussi simple que cela:
[hidden]
fait la même chose donc je vous recommande de[hidden]
dans le bootstrap 4.0 la classe "d-none" = "display: none!important;"
Pour quelqu'un d'autre de tomber sur cette question, c'est comment j'ai accompli.
J'ai utilisé
'visibility'
parce que je voulais préserver l'espace occupé par l'élément. Si vous ne le souhaitez pas, vous pouvez simplement utiliser'display'
et mis à'none'
;Vous pouvez lier à votre élément html dynamiquement ou non.
ou
Utilisation caché comme vous liez un modèle de contrôle et de spécifier css pour elle:
HTML:
CSS:
monexpression peut être défini à true ou false
<div hidden="{{ myExpression }}">
Cela ne fonctionne pas, en tant que "monexpression" va se converti en une chaîne de caractères à afficher dans le code html. À la fois la chaîne "vrai" et "faux" sont truthy, de sorte qu'il sera toujours cachéIl y a deux exemples sur Angulaire documents https://angular.io/guide/structural-directives#why-remove-rather-than-hide
Vous pouvez utiliser [style.affichage]=" "bloc" " à remplacer ngShow et [style.affichage]=" "aucun "" pour remplacer ngHide.
Pour masquer et afficher la div sur le bouton cliquez sur angulaire 6.
Code Html
Composant .ts Code
cela fonctionne pour moi, et c'est la façon de le remplacer ng-hide et ng-show angular6.
profiter...
Grâce
pour moi,
[hidden]=!var
n'a jamais fonctionné.Donc,
<div *ngIf="expression" style="display:none;">
Et,
<div *ngIf="expression">
Toujours donner des résultats corrects.