Tengo un problema para ocultar y mostrar un elemento que depende de una variable booleana en Angular 2.
Este es el código para que el div muestre y oculte:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
la variable está "editada" y se almacena en mi 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);
}
}
El elemento está oculto, cuando se inicia la función saveTodos, se muestra el elemento, pero después de 3 segundos, incluso si la variable vuelve a ser falsa, el elemento no se oculta. ¿Por qué?
edited
Es una variable global. ¿Cuál sería su enfoque dentro de un*ngFor-loop
?Hay dos opciones dependiendo de lo que quieras lograr:
Puede usar la directiva oculta para mostrar u ocultar un elemento
Puede usar la directiva de control ngIf para agregar o eliminar el elemento. Esto es diferente de la directiva oculta porque no muestra / oculta el elemento, pero agrega / elimina del DOM. Puede perder datos no guardados del elemento. Puede ser la mejor opción para un componente de edición que se cancela.
Para su problema de cambio después de 3 segundos, puede deberse a una incompatibilidad con setTimeout. ¿Incluyó la biblioteca angular2-polyfills.js en su página?
fuente
[hidden]="edited"
no parece tener ningún efecto ...?[hidden] { display: none !important;}
en su CSS global.Cuando no le importa eliminar el elemento Dom HTML, use * ngIf.
De lo contrario, use esto:
fuente
Para que el componente secundario muestre que estaba usando
*ngif="selectedState == 1"
En lugar de eso usé
[hidden]="selectedState!=1"
Funcionó para mí ... cargar el componente hijo correctamente y después de ocultar y no ocultar el componente hijo no estaba indefinido después de usar esto.
fuente
Este es un buen caso de uso para una directiva. Algo como esto es sorprendentemente útil.
fuente
ngIf
istrue
. ¿Hay alguna manera de establecer la variable del padre que controla estofalse
?ngIf
más si el elemento está en el DOM o no. Lo que quiero es esto:<div [hidden]="messages" [removeAfter]=3000>...
donde muestro / oculto mensajes si hay alguno y luego elimino los mensajes después de 3 segundos para que el usuario no tenga que cerrar el cuadro. Agregué su directiva arriba y la cambié para hacer unahide()
pero no se llama cuando se muestran los mensajes. ¿Cómo consigo que se invoque en el evento?@Output()
yEventEmitter
?Podemos hacerlo usando el siguiente fragmento de código.
Código angular:
Plantilla HTML:
fuente
Dependiendo de sus necesidades,
*ngIf
o[ngClass]="{hide_element: item.hidden}"
dondehide_element
es la clase CSS{ display: none; }
*ngIf
puede causar problemas si está cambiando la*ngIf
eliminación de variables de estado , en esos casosdisplay: none;
se requiere el uso de CSS .fuente
La solución @inoabrian anterior funcionó para mí. Me encontré con una situación en la que actualizaría mi página y mi elemento oculto volvería a aparecer en mi página. Esto es lo que hice para resolverlo.
fuente
Simplemente agregue bind (this) en su función setTimeout, comenzará a funcionar
y en cambio de HTML
A
fuente