Так, ви можете встановити входи компонентів, що відображаються через розетки маршрутизатора . На жаль, ви повинні робити це програмно, як зазначалося в інших відповідях. У цьому є великий застереження, коли задіяні спостережувані (описані нижче).
Ось як:
(1) Підключіть до activate
події маршрутизатора-розетки в батьківському шаблоні:
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(2) Перейдіть до батьківського файлу машинопису та програмно встановлюйте входи дочірнього компонента щоразу, коли вони активуються:
onOutletLoaded(component) {
component.node = 'someValue';
}
Наведена вище версія onOutletLoaded
спрощена для ясності, але працює лише в тому випадку, якщо ви можете гарантувати, що всі дочірні компоненти мають ті самі входи, які ви призначаєте. Якщо у вас є компоненти з різними входами, використовуйте захисні пристрої типу:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
Чому цей метод може бути кращим за метод обслуговування?
Ні цей метод, ні метод обслуговування не є "правильним способом" спілкування з дочірніми компонентами (обидва методи відходять від чистого прив'язки шаблону), тому вам просто потрібно вирішити, який шлях вважається більш доцільним для проекту.
Однак цей метод дозволяє уникнути створення об'єкта-посередника (служби), який щільно поєднує службу та дочірні компоненти. У багатьох випадках це здається наближеним до "кутового шляху", оскільки ви можете продовжувати передавати дані дочірнім компонентам через @Inputs. Він також добре підходить для вже існуючих або сторонніх компонентів, які ви не хочете або не можете тісно поєднати з цією послугою. З іншого боку, це може бути менш схожим на кутовий спосіб, коли ...
Застереження
Застереження цього методу полягає в тому, що, оскільки ви передаєте дані програмно, у вас більше немає можливості передавати спостережувані дані у ваш шаблон (сюрприз!). Це означає, що ви втрачаєте величезну перевагу кутового управління життєвим циклом спостережуваного для себе, коли використовуєте шаблон асинхронної труби.
Натомість вам потрібно буде налаштувати щось, щоб отримувати поточні спостережувані значення при кожному виклику onChildLoaded
функції. Для цього, ймовірно, також знадобиться деяке розірвання функції батьківського компонента onDestroy
. Це не надто незвично, є й інші випадки, коли це потрібно зробити, наприклад, коли використовується спостережуваний, який навіть не потрапляє до шаблону.
node
де це як тип,string
і це, здається, не працює, або я роблю щось не так