Eu tenho vários elementos que quero que sejam visíveis sob certas condições.
No AngularJS eu escreveria
<div ng-show="myVar">stuff</div>
Como posso fazer isso no Angular 2+?
angular
angular-components
angular-template
Mihai Răducanu
fonte
fonte
Respostas:
Basta vincular à
hidden
propriedadeVeja também
problemas
hidden
tem alguns problemas porque pode entrar em conflito com o CSS dadisplay
propriedadeVeja como
some
no exemplo do Plunker não fica oculto porque tem um estiloconjunto. (Isso pode se comportar de maneira diferente em outros navegadores - testei com o Chrome 50)
Gambiarra
Você pode corrigi-lo adicionando
Para um estilo global em
index.html
.outra armadilha
são os mesmos que
e não mostrará o elemento
hidden="false"
atribuirá a string"false"
que é considerada verdadeira.Somente o valor
false
ou a remoção do atributo realmente tornarão o elemento visível.O uso
{{}}
também converte a expressão em uma sequência e não funcionará conforme o esperado.Somente a ligação com
[]
funcionará conforme o esperado, pois issofalse
é atribuído como emfalse
vez de"false"
.*ngIf
vs[hidden]
*ngIf
remove efetivamente seu conteúdo do DOM enquanto[hidden]
modifica adisplay
propriedade e instrui apenas o navegador a não mostrar o conteúdo, mas o DOM ainda o contém.fonte
*ngIf
pode ser a maneira correta na maioria dos casos, mas às vezes você realmente quer que um elemento esteja lá, visualmente oculto. Um estilo CSS com[hidden]{display:none!important}
ajuda. É assim, por exemplo, como o Bootstrap garante que os[hidden]
elementos estejam realmente ocultos. Veja GitHubUse o
[hidden]
atributo:Ou você pode usar
*ngIf
Estas são duas maneiras de mostrar / ocultar um elemento. A única diferença é:
*ngIf
removerá o elemento do DOM e[hidden]
instruirá o navegador a mostrar / ocultar um elemento usando adisplay
propriedade CSS mantendo o elemento no DOM.fonte
async
canal, pois a assinatura do observável será adicionada somente depois que a condição se tornar realidade!Eu me encontro na mesma situação com a diferença do que no meu caso, o elemento era um contêiner flexível. Se não for o seu caso, uma solução fácil pode ser
no meu caso, devido ao fato de que muitos navegadores que suportamos ainda precisam do prefixo do fornecedor para evitar problemas, procurei outra solução fácil
onde então o CSS é simples como
para sair, o estado exibido é tratado pela classe padrão.
fonte
invalid-feedback
classe bootstrap 4 .Desculpe, eu tenho que discordar da ligação a hidden, que é considerada insegura ao usar o Angular 2. Isso ocorre porque o estilo oculto pode ser substituído facilmente, por exemplo, usando
A abordagem recomendada é usar * ngIf, que é mais seguro. Para mais detalhes, consulte o blog oficial da Angular. 5 erros de novato a serem evitados com o Angular 2
fonte
*ngIf
é uma má escolha. Mas você está certo de que as consequências precisam ser consideradas e apontar armadilhas é sempre uma boa idéia.ngIf
responde exatamente o que essa pergunta está fazendo. Quero ocultar algum conteúdo em uma página que inclua a<router-outlet>
. Se eu usarngIf
, recebo um erro que não consegue encontrar a tomada. Eu preciso que a tomada fique oculta até que meus dados sejam carregados, não ausente até que meus dados sejam carregados.Se o seu caso é que o estilo é display none, você também pode usar a diretiva ngStyle e modificar a tela diretamente, fiz isso para um DropDown de inicialização, o UL está definido para exibir nenhum.
Então, criei um evento de clique para alternar "manualmente" o UL para exibir
Em seguida, no componente eu tenho o atributo showDropDown: bool que eu alterno todas as vezes e, com base em int, defina o displayDDL para o estilo da seguinte maneira
fonte
De acordo com a documentação Angular 1 do ngShow e ngHide , essas duas diretivas adicionam o estilo css
display: none !important;
ao elemento de acordo com a condição dessa diretiva (para ngShow adiciona css em valor falso e para ngHide adiciona css para valor verdadeiro).Podemos conseguir esse comportamento usando a diretiva Angular 2 ngClass:
Observe que, para o
show
comportamento em Angular2, precisamos adicionar!
(não) antes do ngShowVal, e para ohide
comportamento em Angular2, não precisamos adicionar!
(não) antes do ngHideVal.fonte
myExpression pode ser definido como verdadeiro ou falso
fonte
<div hidden="{{ myExpression }}">
Isso não funcionará, pois "myExpression" será convertido em uma string a ser renderizada no html. Tanto a string "true" quanto a "false" são verdadeiras, portanto sempre estarão ocultasSe você estiver usando o Bootstrap, é tão simples quanto isto:
fonte
[hidden]
faz o mesmo então eu recomendo[hidden]
no bootstrap 4.0, a classe "d-none" = "display: none! important;"
fonte
Para qualquer um que tropeçar nessa questão, foi assim que eu consegui.
Eu usei
'visibility'
porque queria preservar o espaço ocupado pelo elemento. Se você não desejar, basta usar'display'
e configurá-lo para'none'
;Você pode vinculá-lo ao seu elemento html, dinamicamente ou não.
ou
fonte
Use hidden como você liga qualquer modelo com controle e especifique css para ele:
HTML:
CSS:
fonte
Isto é o que funcionou para mim:
fonte
fonte
para mim,
[hidden]=!var
nunca funcionou.Assim,
<div *ngIf="expression" style="display:none;">
E,
<div *ngIf="expression">
sempre dê resultados corretos.fonte
Existem dois exemplos em documentos angulares https://angular.io/guide/structural-directives#why-remove-rather-than-hide
Você pode usar [style.display] = "'block'" para substituir o ngShow e [style.display] = "'none'" para substituir o ngHide.
fonte
A melhor maneira de lidar com esse problema usando
ngIf
Como isso evita que o elemento seja renderizado no front-end,Se você usar
[hidden]="true"
ou estilizar o hide,[style.display]
ele ocultará apenas o elemento no front end e alguém poderá alterar o valor e visualizá-lo facilmente. Na minha opinião, a melhor maneira de ocultar o elemento éngIf
e também Se você tiver vários elementos (é necessário implementar outra coisa também), você pode usar a
<ng-template>
opçãocódigo de exemplo do modelo ng
fonte
Se você quiser apenas usar as diretivas simétricas
hidden
/shown
que o AngularJS veio, sugiro escrever uma diretiva de atributo para simplificar os modelos assim (testados no Angular 7):Muitas das outras soluções estão corretas. Você deve usar
*ngIf
sempre que possível. O uso dohidden
atributo pode ter estilos inesperados aplicados, mas, a menos que você esteja escrevendo componentes para outras pessoas, provavelmente já sabe se está. Portanto, para que essashown
diretiva funcione, você também precisará adicionar:aos seus estilos globais em algum lugar.
Com eles, você pode usar a diretiva da seguinte maneira:
com a versão simétrica (e oposta) da seguinte forma:
Para adicionar ao shoulds - você também deve nos usar um prefixo assim
[acmeShown]
vs just[shown]
.O principal motivo pelo qual usei uma
shown
diretiva de atributo é converter o código AngularJS em Angular -AND- quando o conteúdo oculto contém componentes de contêiner que causam viagens de ida e volta ao XHR. A razão pela qual eu não uso apenas[hidden]="!myVar"
é que, com frequência, é mais complicado, como:[hidden]="!(myVar || yourVar) && anotherVar" - yes I can invert that, but it is more error prone.
[mostrado] `é simplesmente mais fácil de pensar.fonte
Para ocultar e mostrar o botão div on, clique na angular 6.
Código HTML
Código .ts do componente
isso funciona para mim e é uma maneira de substituir ng-hide e ng-show em angular6.
desfrutar...
obrigado
fonte