Qual é o equivalente de ngShow e ngHide em Angular?

Tenho uma série de elementos que quero ser visível sob certas condições.

Em AngularJS eu escreveria
<div ng-show="myVar">stuff</div>
Como posso fazer isto em Angular?

Author: Jota.Toledo, 2016-02-23

12 answers

Basta ligar à propriedadehidden

[hidden]="!myVar"

Ver também

Questões

hidden tem alguns problemas no entanto, porque pode entrar em conflito com CSS para a propriedade display.

Vê como some exemplo do Plunker não se esconde porque tem um estilo

:host {display: block;}
Pronto. (Isto pode comportar-se de forma diferente em outros navegadores-eu testei com Chrome 50)

Solução de trabalho

Você pode corrigi-lo adicionando

[hidden] { display: none !important;}

A um estilo global em index.html.

Outra armadilha

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

São os mesmos que

hidden="true"

E não mostrará o elemento.

hidden="false" irá atribuir o texto "false" que é considerado verdadeiro.
Só o valor false ou a remoção do atributo fará com que o elemento visivel.

Utilizar {{}} também converte a expressão para uma string e não funcionará como esperado.

Só a ligação com [] funcionará como esperado porque este {[12] } é atribuído como false em vez de "false".

*ngIf vs [hidden]

*ngIf efetivamente remove seu conteúdo do DOM enquanto [hidden] modifica a propriedade display e apenas instrui o navegador para não mostrar o conteúdo, mas o DOM ainda o contém.

 593
Author: Günter Zöchbauer, 2017-02-12 10:35:02
*ngIf="myVar"

Ou

[hidden]="!myVar"

Estas são duas formas de mostrar / esconder o elemento. A única diferença entre *ngIf e [hidden] é que *ngIf irá adicionar ou remover completamente o elemento do DOM, mas com [hidden], o navegador irá mostrar/ocultar o elemento usando CSS a display propriedade e permanecerá no DOM.

 98
Author: Ali Shahzad, 2017-08-02 14:56:00
Desculpa, tenho de discordar da ligação ao oculto, que é considerado inseguro quando se usa o Angular 2. Isto porque o estilo escondido pode ser facilmente substituído, por exemplo, usando
display: flex;

A abordagem recomendada é a utilização de * ngIf, que é mais segura. Para mais detalhes, consulte o blog Oficial Angular. 5 Erros de principiante para evitar com Ângulos 2

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

Encontro-me na mesma situação com a diferença do que no meu caso o elemento era um recipiente flexível.If is not your case an easy work around could be

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

No meu caso, devido ao fato de que muitos navegadores que apoiamos ainda precisam do prefixo do fornecedor para evitar problemas, eu fui para outra solução fácil

[class.is-loading]="isLoading"

Onde então o CSS é simples como

&.is-loading { display: none } 

Deixar então o estado apresentado tratado pela classe predefinida.

 15
Author: Vale Steve, 2018-08-09 07:00:45

Se o seu caso é que o estilo não aparece nenhum, também pode usar a Directiva ngStyle e modificar a visualização directamente, fiz isso para uma lista de inicialização, a UL nela está configurada para não mostrar nenhuma.

Por isso criei um evento com um botão para" manualmente " activar o UL para mostrar

<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>    

Então, no componente que eu tenho showDropDown: bool atributo que eu comutar todas as vezes, e com base em int, defina o displayDDL para o estilo como se segue

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

De Acordo com a Angular 1 documentação de ngShow e ngHide, ambos directiva adiciona o estilo css display: none !important;, para o elemento de acordo com a condição de que a directiva (por ngShow adiciona css no valor falso, e para ngHide adiciona o css para o valor verdadeiro).

Podemos alcançar este comportamento usando a directiva 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>

Observe que para o comportamento de show no Angular2 precisamos adicionar ! (não) antes do ngShowVal, e para o comportamento de hide in Angular2 we don't need to add ! (not) before the ngHideVal.

 3
Author: Gil Epshtain, 2016-12-01 11:57:36

Se estiver a utilizar Bootstrap é tão simples como isto:

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

Usar escondido como se ligasse qualquer Modelo com controlo e especificar css para ele:

HTML:

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

CSS:

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

A minha expressão pode ser definida como verdadeira ou falsa

 2
Author: Niyaz, 2017-01-19 05:02:03

No bootstrap 4. 0 a classe "d-none" = " display: none!importante; "

<div [ngClass]="{'d-none': exp}"> </div>
 1
Author: 63RMAN, 2018-03-07 17:36:51
Para qualquer outra pessoa que tropece nesta questão, foi assim que a consegui.
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');
    }
  }
}

Usei 'visibility' porque queria preservar o espaço ocupado pelo elemento. Se não o quisesse fazer, podia usar 'display' e ajustá - lo para 'none';

Pode ligá-lo ao seu elemento html, dinamicamente ou não.

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

Ou

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

Para esconder e mostrar div no botão clique em angular 6.

Código Html

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

Componente .código ts

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent{
 isShow=false;
  }
Isto funciona para mim e é uma forma de substituir o ng-hide e o ng-show em angular6. Diverte-te... Obrigado.
 0
Author: Manoj Gupta, 2018-08-30 06:49:48