Quel est l'équivalent de ngShow et ngHide en angle?

j'ai un certain nombre d'éléments que je veux voir sous certaines conditions.

à AngularJS j'écrirais

<div ng-show="myVar">stuff</div>

Comment puis-je faire cela en angle?

345
demandé sur Jota.Toledo 2016-02-23 15:50:27

12 réponses

juste lier à la hidden propriété

[hidden]="!myVar"

voir aussi

questions

hidden a quelques problèmes cependant parce qu'il peut entrer en conflit avec CSS pour la propriété display .

Voir comment some dans exemple de plongeur ne se cache pas parce qu'il a un style

:host {display: block;}

ensemble. (Cela peut se comporter différemment dans d'autres navigateurs que j'ai testé avec Chrome 50)

solution de contournement

vous pouvez le corriger en ajoutant

[hidden] { display: none !important;}

Pour un style global index.html .

un autre piège

hidden="false"
hidden="{{false}}"
hidden="{{isHidden}}" // isHidden = false;

sont les mêmes que

hidden="true"

et ne montrera pas l'élément.

hidden="false" assignera la chaîne "false" qui est considérée comme vraie.

Seule la valeur false ou supprimer l'attribut fera réellement l'élément visible.

utilisant {{}} convertit également l'expression en chaîne et ne fonctionnent pas comme prévu.

seulement la liaison avec [] fonctionnera comme prévu parce que ce false est assigné comme false au lieu de "false" .

*ngIf vs [hidden]

*ngIf supprime effectivement son contenu du DOM tandis que [hidden] modifie la propriété display et demande seulement au navigateur de ne pas afficher le contenu mais le DOM le contient toujours.

593
répondu Günter Zöchbauer 2017-02-12 10:35:02
*ngIf="myVar"

ou

[hidden]="!myVar"

ce sont deux façons de montrer/cacher l'élément. La seule différence entre *ngIf et [hidden] est que *ngIf ajoutera ou supprimera complètement L'élément de DOM mais avec [hidden] le navigateur affichera/masquera l'élément en utilisant la propriété display de CSS et il restera dans DOM.

98
répondu Ali Shahzad 2017-08-02 14:56:00

Désolé, je dois être en désaccord avec la fixation à caché qui est considéré comme dangereux en utilisant Angular 2. C'est parce que le style caché pourrait être facilement réécrit par exemple en utilisant

display: flex;

l'approche recommandée est d'utiliser *ngIf qui est plus sûr. Pour plus de détails, veuillez consulter le blog officiel Angular. 5 erreurs de débutant à éviter avec angle 2

<div *ngIf="showGreeting">
   Hello, there!
</div>
21
répondu Tim Hong 2016-12-11 23:38:38

je me trouve dans la même situation avec la différence que dans mon cas l'élément était un conteneur souple.Si ce n'est pas votre cas un travail facile autour pourrait être

[style.display]="!isLoading ? 'block' : 'none'"

dans mon cas en raison du fait que beaucoup de navigateurs que nous supportons ont encore besoin du préfixe du fournisseur pour éviter les problèmes je suis allé pour une autre solution facile

[class.is-loading]="isLoading"

où alors le CSS est simple comme

&.is-loading { display: none } 

de quitter alors le état affiché géré par la classe par défaut.

15
répondu Vale Steve 2018-08-09 07:00:45

si votre cas est que le style est display none, Vous pouvez aussi utiliser la directive ngStyle et modifier l'affichage directement, j'ai fait cela pour un bootstrap DropDown L'UL sur elle est défini pour afficher none.

donc j'ai créé un événement de clic pour "manuellement" basculer L'UL pour afficher

<div class="dropdown">
    <button class="btn btn-default" (click)="manualtoggle()"  id="dropdownMenu1" >
    Seleccione una Ubicación
    <span class="caret"></span>
    </button>
    <ul class="dropdown-menu" [ngStyle]="{display:displayddl}">
        <li *ngFor="let object of Array" (click)="selectLocation(location)">{{object.Value}}</li>                                
     </ul>
 </div>    

puis sur le composant j'ai showDropDown: bool attribut que je bascule à chaque fois, et basé sur int, définir le displayDDL pour le style comme suit

showDropDown:boolean;
displayddl:string;
manualtoggle(){
    this.showDropDown = !this.showDropDown;
    this.displayddl = this.showDropDown ? "inline" : "none";
}
3
répondu Gary 2016-08-08 15:22:27

selon la documentation angulaire 1 de ngShow et ngHide , ces deux directives ajoutent le style css display: none !important; , à l'élément selon la condition de cette directive (pour ngShow ajoute le css sur la fausse valeur, et pour ngHide ajoute le css pour la vraie valeur).

nous pouvons obtenir ce comportement en utilisant la directive Angular 2 ngClass:

/* style.css */
.hide 
{
    display: none !important;
}

<!-- old angular1 ngShow -->
<div ng-show="ngShowVal"> I'm Angular1 ngShow... </div>

<!-- become new angular2 ngClass -->
<div [ngClass]="{ 'hide': !ngShowVal }"> I'm Angular2 ngShow... </div>

<!-- old angular2 ngHide -->
<div ng-hide="ngHideVal"> I'm Angular1 ngHide... </div>

<!-- become new angular2 ngClass -->
<div [ngClass]="{ 'hide': ngHideVal }"> I'm Angular2 ngHide... </div>

notez que pour show comportement dans Angular2 nous avons besoin d'ajouter ! (pas) avant la ngShowVal, et pour hide comportement en Angular2 nous ne pas besoin d'ajouter ! (pas) avant la ngHideVal.

3
répondu Gil Epshtain 2016-12-01 11:57:36

si vous utilisez Bootstrap est aussi simple que ceci:

<div [class.hidden]="myBooleanValue"></div>
3
répondu Gian Marco Gherardi 2017-03-22 17:24:09

utiliser caché comme vous liez n'importe quel modèle avec contrôle et spécifier css pour elle:

HTML:

<input type="button" class="view form-control" value="View" [hidden]="true" />

CSS:

[hidden] {
   display: none;
}
2
répondu Sandip Patel 2016-09-28 09:11:53
<div hidden="{{ myExpression }}">
<div [hidden]="myExpression">

monexpression peut être défini à true ou false

2
répondu Niyaz 2017-01-19 05:02:03

dans bootstrap 4.0 la classe "d-none" = " display: none!important; "

<div [ngClass]="{'d-none': exp}"> </div>
1
répondu 63RMAN 2018-03-07 17:36:51

pour quiconque trébuchant sur cette question, c'est comme ça que je l'ai fait.

import {Directive, ElementRef, Input, OnChanges, Renderer2} from "@angular/core";

@Directive({
  selector: '[hide]'
})
export class HideDirective implements OnChanges {
  @Input() hide: boolean;

  constructor(private renderer: Renderer2, private elRef: ElementRef) {}

  ngOnChanges() {
    if (this.hide) {
      this.renderer.setStyle(this.elRef.nativeElement, 'visibility', 'hidden');
    } else {
      this.renderer.setStyle(this.elRef.nativeElement, 'visibility', 'visible');
    }
  }
}

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 réglez 'none' ;

, Vous pouvez le lier à votre élément html dynamiquement ou non.

<span hide="true"></span>

ou

<span [hide]="anyBooleanExpression"></span>
1
répondu Anjil Dhamala 2018-04-25 23:06:31

pour cacher et montrer div sur le bouton cliquez dans l'angle 6.

Code Html

<button (click)=" isShow=!isShow">FormatCell</button>
<div class="ruleOptionsPanel" *ngIf=" isShow">
<table>
<tr>
<td>Name</td>
<td>Ram</td>
</tr>
</table>
</div>

composant .code ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent{
 isShow=false;
  }

cela fonctionne pour moi et c'est une façon de remplacer ng-hide et ng-show en angular6.

de profiter de...

Merci

0
répondu Manoj Gupta 2018-08-30 06:49:48