Wie man ein modales Popup erstellt, das mit Angular 4 kompatibel ist
Ich möchte in der Lage sein, ein Popup-Fenster zu erstellen, das eine bestimmte Angular 4 Komponente von mir lädt, wenn eine Optionsschaltfläche ausgewählt wird.
Es scheint, dass die in den Antworten auf diese Frage aufgeführten Methoden nur mit Angular 2 kompatibel sind.
Ich bin nicht sicher, wo ich anfangen soll und wäre für jede Hilfe dankbar!
19
2
Die akzeptierte Antwort fügt eine große Abhängigkeit hinzu, um eine Fliege zu erschlagen. Modal (und modeless) Dialoge sind weitgehend das Ergebnis einer CSS-Klasse oder zwei. Versuchen Sie diese "umbenennen..." Beispiel:
Parent-HTML, das `` child verwendet:
Übergeordnete Klasse. Der
@Component
Dekorator wurde der Einfachheit halber weggelassen. (Die Eigenschaft "Name" gehört zur übergeordneten Klasse und würde auch existieren, wenn wir kein Formular hätten, um sie zu ändern).Kind zu-modale Komponente.
@Component
Dekorator und Importe wieder weggelassen.Kind-HTML, bevor es modalisiert wird.
modal
und ist für ein `Aber die CSS-Klasse "modal" verhindert nicht die Interaktion mit der Seite darunter. (Also platzieren wir ein
Overlay
unter dem Modal, um Mausaktivitäten zu absorbieren und zu ignorieren. Dasoverlay
ist auch für ein `modal
undoverlay
in der untergeordneten HTML.Und das's it. Im Grunde genommen 2 CSS-Klassen und Sie können jede Komponente in ein Modal verwandeln. Tatsächlich können Sie eine Komponente in-line oder als Modal zur Laufzeit anzeigen, indem Sie einfach die Existenz der CSS-Klasse mit
ngClass
oder[class.modal]="showAsModalBoolean"
ändern.Sie können dies so ändern, dass das Kind die Logik des Ein- und Ausblendens kontrolliert. Verschieben Sie die Funktionen *ngIf, showIt und show() in das Child. Fügen Sie im übergeordneten Element
@ViewChild(MyModalComponent) renameModal: MyModalComponent;
hinzu, und dann kann das übergeordnete Element zwingendthis.renameModal.show(this.name);
aufrufen und die Initialisierung und die enthaltenen Divs nach Bedarf neu verdrahten.Das Kind-Modal kann Informationen an eine Elternfunktion zurückgeben, wie oben gezeigt, oder die Kind-Methode "show()" könnte stattdessen einen Callback akzeptieren oder ein Promise zurückgeben, je nach Geschmack.
Zwei Dinge sind zu beachten:
this.renameModal.show(..);
wird nicht funktionieren, wenn es ein ngIf auf `` gibt, weil es nicht existieren wird, um die Funktion zu exponieren, um mit zu beginnen. ngIf entfernt die gesamte Komponente, show()-Funktion und alles, so verwenden Sie[hidden]
stattdessen, wenn Sie dies aus irgendeinem Grund benötigen.Modals-on-modals werden z-index Probleme haben, da sie alle den gleichen z-index haben. Dies kann mit
[style.z-index]="calculatedValue"
oder ähnlichem gelöst werden.Prüfen Sie Angular Material Dialogue, hier ist der Plunker