Mam problem z ukryciem i wyświetleniem elementu zależnego od zmiennej boolowskiej w Angular 2.
to jest kod elementu div, który ma pokazywać i ukrywać:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
zmienna jest „edytowana” i jest przechowywana w moim komponencie:
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);
}
}
Element jest ukryty, po uruchomieniu funkcji saveTodos element jest pokazywany, ale po 3 sekundach, nawet jeśli zmienna wróci na fałsz, element się nie ukryje. Czemu?
edited
jest zmienną globalną. Jakie byłoby Twoje podejście w ramach*ngFor-loop
?Istnieją dwie opcje w zależności od tego, co chcesz osiągnąć:
Możesz użyć dyrektywy hidden, aby pokazać lub ukryć element
Możesz użyć dyrektywy ngIf control, aby dodać lub usunąć element. Różni się to od dyrektywy hidden, ponieważ nie pokazuje / nie ukrywa elementu, ale dodaje / usuwa z DOM. Możesz stracić niezapisane dane elementu. Może to być lepszy wybór w przypadku anulowanego komponentu edycji.
Dla Ciebie problem zmiany po 3 sekundach może być spowodowany niekompatybilnością z setTimeout. Czy umieściłeś na swojej stronie bibliotekę angular2-polyfills.js?
źródło
[hidden]="edited"
nie wydaje się mieć żadnych efektów ...?[hidden] { display: none !important;}
w swoim globalnym css.Jeśli nie zależy Ci na usunięciu elementu HTML Dom, użyj * ngIf.
W przeciwnym razie użyj tego:
źródło
Aby komponent podrzędny był widoczny, używam
*ngif="selectedState == 1"
Zamiast tego użyłem
[hidden]="selectedState!=1"
U mnie zadziałało ... ładowanie komponentu potomnego poprawnie i po ukryciu i odznaczeniu komponentu potomnego nie było niezdefiniowane po użyciu tego.
źródło
To dobry przypadek użycia dyrektywy. Coś takiego jest zaskakująco przydatne.
źródło
ngIf
jesttrue
. Czy istnieje sposób na ustawienie zmiennej nadrzędnej, która to kontrolujefalse
?ngIf
bardziej na tym, czy element jest w DOM, czy nie. Chcę tego:<div [hidden]="messages" [removeAfter]=3000>...
gdzie pokazuję / ukrywam wiadomości, jeśli takie są, a następnie usuwam wiadomości po 3 sekundach, aby użytkownik nie musiał zamykać okna. Dodałem twoją dyrektywę powyżej i przełączyłem ją na wykonanie a,hide()
ale nie jest wywoływana, gdy wyświetlane są komunikaty. Jak sprawić, by został wywołany w wydarzeniu?@Output()
iEventEmitter
?Możemy to zrobić za pomocą poniższego fragmentu kodu.
Kod kątowy:
Szablon HTML:
źródło
W zależności od Twoich potrzeb
*ngIf
lub miejsca, w[ngClass]="{hide_element: item.hidden}"
którymhide_element
znajduje się klasa CSS{ display: none; }
*ngIf
może powodować problemy, jeśli zmieniasz stan, zmienne*ngIf
są usuwane, w takich przypadkachdisplay: none;
wymagane jest użycie CSS .źródło
@inoabrian powyżej rozwiązanie zadziałało dla mnie. Znalazłem się w sytuacji, w której odświeżyłem stronę, a ukryty element ponownie pojawił się na mojej stronie. Oto, co zrobiłem, aby go rozwiązać.
źródło
Po prostu dodaj bind (this) w swojej funkcji setTimeout, a zacznie działać
i zmiana HTML
Do
źródło