Ja, Sie können Eingaben von Komponenten festlegen, die über Router-Ausgänge angezeigt werden . Leider müssen Sie dies programmgesteuert tun, wie in anderen Antworten erwähnt. Es gibt eine große Einschränkung, wenn Observable beteiligt sind (siehe unten).
Hier ist wie:
(1) Schließen Sie das activate
Ereignis des Router-Outlets in der übergeordneten Vorlage an:
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(2) Wechseln Sie zur Typoskriptdatei des übergeordneten Elements und stellen Sie die Eingaben der untergeordneten Komponente bei jeder Aktivierung programmgesteuert ein:
onOutletLoaded(component) {
component.node = 'someValue';
}
Die obige Version von onOutletLoaded
ist aus Gründen der Übersichtlichkeit vereinfacht, funktioniert jedoch nur, wenn Sie sicherstellen können, dass alle untergeordneten Komponenten genau die gleichen Eingaben haben, die Sie zuweisen. Wenn Sie Komponenten mit unterschiedlichen Eingängen haben, verwenden Sie Typschutz:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
Warum kann diese Methode der Servicemethode vorgezogen werden?
Weder diese Methode noch die Servicemethode sind "der richtige Weg", um mit untergeordneten Komponenten zu kommunizieren (beide Methoden entfernen sich von der reinen Vorlagenbindung). Sie müssen also nur entscheiden, welcher Weg für das Projekt besser geeignet ist.
Diese Methode ermöglicht es Ihnen jedoch, das Erstellen des Middle-Man-Objekts (des Dienstes) zu vermeiden und ist in vielen Fällen näher am "Winkelweg", da Sie @Input weiterhin in Ihren untergeordneten Komponenten verwenden können. Es eignet sich auch gut für bereits vorhandene Komponenten oder Komponenten von Drittanbietern, die Sie nicht eng mit diesem Service verbinden möchten oder können. Andererseits...
Vorbehalt
Die Einschränkung bei dieser Methode besteht darin, dass Sie, da Sie Daten programmgesteuert übergeben, nicht mehr die Möglichkeit haben, beobachtbare Daten über die Vorlageneingabebindung zu übergeben (Überraschung!). Das bedeutet, dass Sie den großen Vorteil der Winkelverwaltung des Lebenszyklus des Observablen für Sie verlieren, wenn Sie das Pipe-Async-Muster verwenden.
Stattdessen müssen Sie bei jedem onChildLoaded
Aufruf der Funktion etwas einrichten, um die aktuell beobachtbaren Werte abzurufen . Dies erfordert wahrscheinlich auch einen gewissen Abbau der onDestroy
Funktion der übergeordneten Komponente . Dies ist nichts Ungewöhnliches. Es gibt andere Fälle, in denen dies durchgeführt werden muss, z. B. wenn ein Observable verwendet wird, das nicht einmal zur Vorlage gelangt.
node
wo es als Typ iststring
und es scheint nicht zu funktionieren oder ich mache etwas falsch