Ich habe ein Problem beim Ausblenden und Anzeigen eines Elements in Abhängigkeit von einer booleschen Variablen in Angular 2.
Dies ist der Code, den das Div ein- und ausblenden soll:
<div *ngIf="edited==true" class="alert alert-success alert-dismissible fade in" role="alert">
<strong>List Saved!</strong> Your changes has been saved.
</div>
Die Variable ist "bearbeitet" und in meiner Komponente gespeichert:
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);
}
}
Das Element wird ausgeblendet. Wenn die Funktion saveTodos gestartet wird, wird das Element angezeigt. Nach 3 Sekunden wird das Element jedoch nicht ausgeblendet, selbst wenn die Variable wieder falsch ist. Warum?
edited
ist eine globale Variable. Was wäre Ihr Ansatz innerhalb eines*ngFor-loop
?Es gibt zwei Möglichkeiten, je nachdem, was Sie erreichen möchten:
Mit der Anweisung hidden können Sie ein Element ein- oder ausblenden
Mit der Steueranweisung ngIf können Sie das Element hinzufügen oder entfernen. Dies unterscheidet sich von der versteckten Direktive, da das Element nicht angezeigt / ausgeblendet wird, sondern dem DOM hinzugefügt / daraus entfernt wird. Sie können nicht gespeicherte Daten des Elements verlieren. Dies kann die bessere Wahl für eine Bearbeitungskomponente sein, die abgebrochen wird.
Bei einem Änderungsproblem nach 3 Sekunden kann dies auf eine Inkompatibilität mit setTimeout zurückzuführen sein. Haben Sie die Bibliothek angular2-polyfills.js in Ihre Seite aufgenommen?
quelle
[hidden]="edited"
scheint keine Auswirkungen zu haben ...?[hidden] { display: none !important;}
in Ihrem globalen CSS.Wenn Sie das HTML-Dom-Element nicht entfernen möchten, verwenden Sie * ngIf.
Andernfalls verwenden Sie Folgendes:
quelle
Damit die untergeordnete Komponente zeigt, dass ich sie verwendet habe
*ngif="selectedState == 1"
Stattdessen habe ich verwendet
[hidden]="selectedState!=1"
Es hat bei mir funktioniert. Das Laden der untergeordneten Komponente ordnungsgemäß und nach dem Ein- und Ausblenden der untergeordneten Komponente war nach dieser Verwendung nicht undefiniert.
quelle
Dies ist ein guter Anwendungsfall für eine Richtlinie. So etwas ist überraschend nützlich.
quelle
ngIf
istrue
. Gibt es eine Möglichkeit, die Variable des Elternteils festzulegen, die dies steuertfalse
?ngIf
eher darin, ob sich das Element im DOM befindet oder nicht. Was ich möchte, ist Folgendes:<div [hidden]="messages" [removeAfter]=3000>...
Wo ich Nachrichten ein- / ausblende, wenn es welche gibt, und Nachrichten nach 3 Sekunden entferne, damit der Benutzer das Feld nicht schließen muss. Ich habe Ihre Anweisung oben hinzugefügt und auf a umgestellt,hide()
aber sie wird nicht aufgerufen, wenn die Nachrichten angezeigt werden. Wie kann ich erreichen, dass es bei der Veranstaltung aufgerufen wird?@Output()
undEventEmitter
?Wir können dies mit dem folgenden Code-Snippet tun.
Winkelcode:
HTML-Vorlage:
quelle
Je nach Bedarf,
*ngIf
oder[ngClass]="{hide_element: item.hidden}"
wo CSS - Klassehide_element
ist{ display: none; }
*ngIf
kann Probleme verursachen, wenn Sie Statusvariablen*ngIf
entfernen. In diesen Fällen ist die Verwendung von CSSdisplay: none;
erforderlich.quelle
@inoabrian Lösung oben hat bei mir funktioniert. Ich stieß auf eine Situation, in der ich meine Seite aktualisierte und mein verstecktes Element auf meiner Seite wieder auftauchte. Folgendes habe ich getan, um das Problem zu beheben.
quelle
Fügen Sie einfach bind (this) in Ihre setTimeout-Funktion ein, damit es funktioniert
und in HTML ändern
Zu
quelle