Estou tendo um problema ao ocultar e mostrar um elemento dependendo de uma variável booleana no Angular 2.
este é o código para a div mostrar e ocultar:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
a variável é "editada" e é armazenada no meu componente:
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);
}
}
O elemento está oculto, quando a função saveTodos é iniciada, o elemento é mostrado, mas após 3 segundos, mesmo que a variável volte a ser falsa, o elemento não se oculta. Por quê?
edited
é uma variável global. Qual seria sua abordagem dentro de um*ngFor-loop
?Existem duas opções, dependendo do que você deseja alcançar:
Você pode usar a diretiva oculta para mostrar ou ocultar um elemento
Você pode usar a diretiva de controle ngIf para adicionar ou remover o elemento. Isso é diferente da diretiva oculta porque não mostra / oculta o elemento, mas adiciona / remove do DOM. Você pode perder dados não salvos do elemento. Pode ser a melhor opção para um componente de edição que é cancelado.
Para seu problema de alteração após 3 segundos, pode ser devido à incompatibilidade com setTimeout. Você incluiu a biblioteca angular2-polyfills.js na sua página?
fonte
[hidden]="edited"
parece não ter nenhum efeito ...?[hidden] { display: none !important;}
no seu css global.Quando você não se importa com a remoção do elemento dom Html, use * ngIf.
Caso contrário, use isto:
fonte
Para o componente filho mostrar que eu estava usando
*ngif="selectedState == 1"
Em vez disso, eu usei
[hidden]="selectedState!=1"
Funcionou para mim .. carregar o componente filho corretamente e depois de ocultar e desassociar o componente filho não foi indefinido após o uso.
fonte
Este é um bom caso de uso para uma diretiva. Algo assim é surpreendentemente útil.
fonte
ngIf
istrue
. Existe uma maneira de definir a variável do pai que controla issofalse
?ngIf
mais se o elemento está no DOM ou não. O que eu quero é o seguinte:<div [hidden]="messages" [removeAfter]=3000>...
onde eu mostro / oculto as mensagens, se houver alguma, e removo as mensagens após 3 segundos, para que o usuário não precise fechar a caixa. Eu adicionei sua diretiva acima e mudei para fazer um,hide()
mas ela não é chamada quando as mensagens são mostradas. Como faço para que seja invocado no evento?@Output()
eEventEmitter
?Podemos fazer isso usando o snippet de código abaixo.
Código angular:
Modelo HTML:
fonte
Dependendo de suas necessidades
*ngIf
ou de[ngClass]="{hide_element: item.hidden}"
onde a classe CSShide_element
é{ display: none; }
*ngIf
pode causar problemas se você estiver alterando a*ngIf
remoção de variáveis de estado ; nesses casos,display: none;
é necessário usar CSS .fonte
A solução @inoabrian acima funcionou para mim. Eu tive uma situação em que atualizava minha página e meu elemento oculto reaparecia na minha página. Aqui está o que eu fiz para resolvê-lo.
fonte
Basta adicionar bind (this) na sua função setTimeout, ela começará a funcionar
e na mudança de HTML
Para
fonte